2013-04-23 2 views
0

Это очень простая проблема, к которой я могу найти решение:Как сохранить вертикальное положение прокрутки в QTableWidget

Это мой код:

qint32 pos = ui->twShow->verticalScrollBar()->value(); 
ui->twShow->blockSignals(true);  

//Code for updating the contents QTableWidget twShow, this is done by erasing all cells and adding them again, in case it matters. 

ui->twShow->blockSignals(false); 
if (pos > 0){ 
    ui->twShow->verticalScrollBar()->setValue(pos); 
} 

То, что я хочу сделать это, чтобы просто поддерживать положение вертикальной прокрутки. Однако функция setValue игнорирует значение pos (я проверил, напечатав значение до и после инструкции и оба раза его cero).

Я также пробовал: QScrollBar * bar = ui-> twShow-> verticalScrollBar(); // Тот же код, что и раньше ui-> twShow-> setVerticalScrollBar (bar); // Эта строка вылетает из программы

Однако последняя строка сбрасывает программу (которую я проверил, комментируя ее, и она отлично работает).

Любые советы будут оценены ...

Большое спасибо

+0

вы можете разъяснить, что вы подразумеваете под «той же позицией». В общем случае после обновления может быть загружено несколько строк. Таким образом, вы хотите установить только одну и ту же абсолютную строку или относительную позицию полосы прокрутки или прокрутить новый контент до тех же значений? – evilruff

+0

Количество строк всегда одинаково. Я хочу точно такую ​​же позицию прокрутки. – aarelovich

ответ

0
QTableWidget * tw; 
int   desiredRow; 

// before update 

desiredRow = tw->row(tw->itemAt(1,1)); 

... 
// update code 
... 

tw->scrollToItem(tw->item(desiredRow, 0), 
    QAbstractItemView::EnsureVisible | QAbstractItemView::PositionAtTop); 
+0

Не понимаю. Если ни одна строка не выбрана, как узнать нужную строку? Вот почему я пытаюсь решить эту проблему, установив положение ползунка. – aarelovich

+0

ответьте на обновление с кодом «до обновления» – evilruff

+0

Спасибо, но это не сработало. Он ничего не делает. После обновления полоса прокрутки все еще отображается вверху (и я проверил, что нужная строка содержит номер правой строки). – aarelovich

0

QAbstractItemView :: EnsureVisible = 0. «или» флаг преобразует результат в целое число, которое не является разрешен как параметр метода scrollToItem. С другой стороны, перечисления не предназначены для использования в качестве комбинированных флагов.

Смежные вопросы