| 
 Название: QTreeView  и прокрутка (скроллинг)
 Отправлено: helga1917 от Сентября 10, 2013,  11:53
 
 Добрый день, есть таблица QTreeView в нее добавляются новые строки сверху и прокрутка автоматически смещается на верх. Как добиться того, чтоб прокрутка не смещалась? т.е. если пользователь смотрит на 5 строку, то она не смещается вниз при добавлении новых строк. использование функции  setAutoScroll () не дало результата proxyView = new QTreeView;proxyView->setAutoScroll(false);
 
 Название: Re: QTreeView  и прокрутка (скроллинг)
 Отправлено: GreatSnake от Сентября 10, 2013,  12:34
 
 Я после добавления новых строк вызываю подобное: C++ (Qt)void setVisibleCurrentIndex( QAbstractItemView* v ) {
 QScrollBar* hbar = v->horizontalScrollBar();
 int hbar_value = hbar->value();
 bool hbar_blocked = hbar->signalsBlocked();
 if( !hbar_blocked )
 hbar->blockSignals( true );
 hbar->setUpdatesEnabled( false );
 
 v->scrollTo( v->currentIndex(), QAbstractItemView::PositionAtCenter );
 
 if( !hbar_blocked )
 hbar->blockSignals( false );
 hbar->setValue( hbar_value );
 hbar->setUpdatesEnabled( true );
 }
 
 Свистопляски с заморзкой горизонтального скроллбара пришлось сделать, чтобы вьюпорт не дёргался по горизонтали.
 Название: Re: QTreeView  и прокрутка (скроллинг)
 Отправлено: helga1917 от Сентября 10, 2013,  14:39
 
 спасибо, ваш код помог void Window::setVisibleCurrentIndex(){
 QScrollBar* hbar = proxyView->verticalScrollBar();
 if(scrollAction->isChecked())                         //если "заблокировать СкроллБар" нажат
 { proxyView->scrollTo( proxyView->currentIndex(), QAbstractItemView::PositionAtCenter );
 hbar->blockSignals( true );                     //заблокировать СкроллБар
 proxyView->setUpdatesEnabled( false );}  //отключить обновление трииВиев
 
 if(!(scrollAction->isChecked()))                    //если "заблокировать СкроллБар" отжат
 { hbar->blockSignals( false );                  //разблокировать СкроллБар
 proxyView->setUpdatesEnabled( true );} //включить обновление трииВиев
 }
 
 
 |