Russian Qt Forum

Qt => Вопросы новичков => Тема начата: helga1917 от Сентябрь 10, 2013, 11:53



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