首页 > 解决方案 > QTableWidget 滚动到上一个值

问题描述

我有一个 QTableWidget。在这个 QTableWidget 中,我加载了 500 行(7 列)。用户可以通过垂直滚动条滚动行。我想保存垂直滚动条值并在下次启动时自动应用它。我做了什么:在关闭事件中我保存垂直滚动条值:

saveToFile(myQTableWidget->verticalScrollBar()->value());

在关闭事件中,为了调试,我添加了以下几行:

qDebug() << "Scroll Min " << myQTableWidget->verticalScrollBar()->minimum();
qDebug() << "Scroll Max " << myQTableWidget->verticalScrollBar()->maximum();
qDebug() << "Scroll Val " << myQTableWidget->verticalScrollBar()->value();

输出是:

Scroll Min  0
Scroll Max  58811
Scroll Val  34758

在启动时,我从文件中读取值:

int scrollValue = loadFromFile(myFileName);

现在在变量 scrollValue 中我的值是 34758。

然后我在 QTableWidget 中加载 500 个元素并运行以下代码:

myQTableWidget->setRowCount(500);

for(int i = 0; i < 500; i++) {
   myQTableWidget->setItem(i, 0, ...);
}

//EDIT 15-11-2019
myQTableWidget->resizeRowsToContents(); // <- The guilty row

qDebug() << "Scroll Min " << myQTableWidget->verticalScrollBar()->minimum();
qDebug() << "Scroll Max " << myQTableWidget->verticalScrollBar()->maximum();

if (scrollValue > 0)
    myQTableWidget->verticalScrollBar()->setValue(scrollValue);

奇怪的是输出和之前的不一样(行号不变):

Scroll Min  0
Scroll Max  14906

1)即使 QTableWidget 包含完全相同的项目,为什么 Scroll Max 也不同?2)有没有更好的方法来做到这一点?

标签: qtscrollqtablewidget

解决方案


QTableWidget 也有类似的问题。滚动条的值未更新。

尝试:myQTableWidget->update();插入新项目后。滚动条的值现在应该适合。


推荐阅读