Russian Qt Forum
Ноябрь 24, 2024, 09:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeView и прокрутка (скроллинг)  (Прочитано 2384 раз)
helga1917
Гость
« : Сентябрь 10, 2013, 11:53 »

Добрый день, есть таблица QTreeView в нее добавляются новые строки сверху и прокрутка автоматически смещается на верх. Как добиться того, чтоб прокрутка не смещалась? т.е. если пользователь смотрит на 5 строку, то она не смещается вниз при добавлении новых строк.
использование функции  setAutoScroll () не дало результата
Код:
proxyView = new QTreeView;
proxyView->setAutoScroll(false);
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Сентябрь 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 );
}
 
Свистопляски с заморзкой горизонтального скроллбара пришлось сделать, чтобы вьюпорт не дёргался по горизонтали.
Записан

Qt 5.11/4.8.7 (X11/Win)
helga1917
Гость
« Ответ #2 : Сентябрь 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 );} //включить обновление трииВиев
}
« Последнее редактирование: Сентябрь 10, 2013, 14:54 от helga1917 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 23.