Название: 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 );} //включить обновление трииВиев }
|