【问题标题】:How to maintain vertical scroll position in a QTableWidget如何在 QTableWidget 中保持垂直滚动位置
【发布时间】:2013-04-16 17:47:22
【问题描述】:

这是一个非常简单的问题,我找不到解决方案:

这是我的代码:

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); //这一行会导致程序崩溃

但是最后一行使程序崩溃(我通过评论检查过它,它工作正常)。

任何建议将不胜感激......

非常感谢

【问题讨论】:

  • 您能否澄清一下“相同位置”是什么意思。一般来说,您可以在更新后加载不同数量的行。所以你只想到相同的绝对行或相对滚动条位置或滚动新内容直到出现相同的值?
  • 行数始终相同。我想要完全相同的滚动位置。

标签: qt scrollbar


【解决方案1】:
 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 );

【讨论】:

  • 我不明白。如果未选择任何行,我如何知道所需的行?这就是为什么我试图通过设置滑块位置来解决这个问题。
  • 谢谢,但没有用。它什么也不做。更新后滚动条仍然出现在顶部(我已经检查了所需的行是否包含正确的行号)。
  • 在更新开始前检查desiredRow是否保持正确的值,以及tw->item(desiredRow,0)..的值。
  • 是的。该项目是正确的项目。它根本不滚动。
  • 这样尝试(添加第二个参数)
【解决方案2】:

QAbstractItemView::EnsureVisible = 0。 'or' 标志将结果转换为不允许作为 scrollToItem 方法的参数的整数。另一方面,枚举不打算用作组合标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多