如何设置 QTableWidget 在实时数据输入期间始终滚动到底部

sud*_*ang 5 python qt pyqt pyqt4 qt-designer

我目前有一个工作 GUI,它实现了 QTableWidget(不要与 QTableView 混淆)。这个 QTableWidget 接收实时数据流,我希望拥有它,因此显示的垂直滚动条默认位于底部。我尝试了多种方法,包括 setToBottom() 但没有成功。我知道有很多方法可以通过使用 QTableView 来做到这一点,但是我正在寻找一种通过 QTableWidget 来做到这一点的方法。

Nej*_*jat 6

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)
Run Code Online (Sandbox Code Playgroud)

scrollToItem滚动视图以确保该项目可见。提示参数更精确地指定操作后项目应位于的位置。这里PositionAtTop滚动将项目定位在视口的顶部,并且lastIndex是插入表中的最后一个项目的索引。


Lol*_*4t0 0

据我记得布局失效在 Qt 视图中被延迟。因此,在添加数据后,您无法滚动到某个元素或底部。您应该使用计时器延迟滚动。这有点脏,但这是我想出的唯一工作方式

像这样(C++代码)

void getData()
{
    addDataToWidget();
    QTimer::singleshort(10, widget, SLOT(scrollToBottom());
}
Run Code Online (Sandbox Code Playgroud)