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();
现在滚动值已正确更新。
我有一个 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();
现在滚动值已正确更新。