QTableWidget 滚动到上一个值

QTableWidget scroll to a previous value

我有一个 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) 有更好的方法吗?

我在使用 QTableWidget 时遇到了类似的问题。滚动条的值未更新。

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

这里是解决方案:

myQTableWidget->setRowCount(500);

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

myQTableWidget->resizeRowsToContents(); // <- The guilty row

myQTableWidget->verticalHeader()->resizeSections(QHeaderView::ResizeToContents);
QCoreApplication::processEvents();

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

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

我在 resizeRowsToContents() 之后添加了这两行:

myQTableWidget->verticalHeader()->resizeSections(QHeaderView::ResizeToContents);
QCoreApplication::processEvents();

现在滚动值已正确更新。