我目前有一个实现 QTableWidget 的工作 GUI(不要与 QTableView 混淆)。这个 QTableWidget 接收实时数据流,我想拥有它,所以出现的垂直滚动条默认位于底部。我尝试了几种方法,包括 setToBottom() 但没有成功。我知道有很多方法可以通过使用 QTableView 来做到这一点,但是我正在寻找一种通过 QTableWidget 来做到这一点的方法。
您可以在插入新项目后立即使用
self.ui.tableWidget.scrollToBottom
。但它并不总是按预期工作。它仅将滚动条移动到插入的最后一行的开头,这不一定总是表格的底部,因为有时插入的最后一行的高度确实很大。
所以我认为这是始终滚动到 tablewidget 底部的好方法:
item = self.ui.tableWidget.item(lastIndex, 0)
self.ui.tableWidget.scrollToItem(item, QtGui.QAbstractItemView.PositionAtTop)
self.ui.tableWidget.selectRow(lastIndex)
scrollToItem
滚动视图以确保项目可见。 hint 参数更精确地指定操作后项目应位于的位置。这里 PositionAtTop
滚动以将项目定位在视口的顶部,lastIndex
是插入到表中的最后一个项目的索引。
据我所知,布局失效在 Qt 视图中被延迟。因此,您不能在添加数据后立即滚动到某个元素或底部。您应该使用计时器延迟滚动。这有点脏,但我想出的唯一工作方式
像这样(C++代码)
void getData()
{
addDataToWidget();
QTimer::singleshort(10, widget, SLOT(scrollToBottom());
}
PyQt6,您可以使用:
self.tableWidget.setItem(row, column, itemMeasVal)
self.tableWidget.scrollToItem(itemMeasVal,QtWidgets.QAbstractItemView.ScrollHint.EnsureVisible) # This is for the bar to scroll automatically and then the current item added is always visible
必要时滚动视图以确保项目可见。
hint 参数 更精确地指定操作后项目应位于的位置。 您可以在这里查看更多信息:https://doc.qt.io/qtforpython/PySide6/QtWidgets/QTableWidget.html https://doc.qt.io/qtforpython/PySide6/QtWidgets/QAbstractItemView.html#PySide6.QtWidgets.PySide6.QtWidgets.QAbstractItemView.scrollTo
self.table.verticalScrollBar().setSliderPosition(self.table.verticalScrollBar().maximum())
好运