QTableWidget滚动与选定的项目

Posted

技术标签:

【中文标题】QTableWidget滚动与选定的项目【英文标题】:QTableWidget Scrolling With Selected Item 【发布时间】:2017-01-17 22:47:34 【问题描述】:

所以我使用 QTableWidget 作为用户的各种记录器,在顶部插入新行,而底部的行最终脱落,因为我每秒左右读取一次更新。

我目前正在运行这 3 个命令,以防止用户对小部件执行任何操作。

summaryTable->setSelectionMode(QAbstractItemView::NoSelection);
summaryTable->setFocusPolicy(Qt::NoFocus);
summaryTable->setEditTriggers(QAbstractItemView::NoEditTriggers);

这行得通,用户不能选择一个框(以后不会再突出显示),不能编辑一个框,一切都很好。

即使用户点击了一个单元格,即使它没有明显突出显示,仍然有一些东西允许它被选中,这样当该单元格从表格顶部的插入“推”到当前滚动区域下方时开始向下滚动以跟随此单元格一直到底部。

显然这是令人困惑的,如果用户在几秒钟内单击一个单元格,它会一遍又一遍地在表格中向下滚动它们,这就变成了他们向上滚动并单击标题或其他内容的斗争防止以后滚动。

如何防止这种情况发生?我认为通过阻止选择并关闭我所做的事情会阻止这种情况,但在 QT 中仍然会发生某种类型的选择,即使它在跟踪所选单元格时不可见。

【问题讨论】:

【参考方案1】:

糟糕,没有意识到有 SetAutoScroll 方法,将其设置为 false 解决了问题。

【讨论】:

【参考方案2】:

此方法可能有效 QTableWidget::scrollToItem() 或 QTableWidget::scrollTo() 将工作:)

【讨论】:

【参考方案3】:

您可以通过将行索引设置为 - 来手动滚动项目

self.ui.tableWidget.verticalScrollBar().setValue(index)

您可以按当前索引自动滚动项目:

row = self.ui.tableWidget.currentIndex().row()
self.ui.tableWidget.verticalScrollBar().setValue(row)

【讨论】:

以上是关于QTableWidget滚动与选定的项目的主要内容,如果未能解决你的问题,请参考以下文章

只允许 QTableWidget 列中的值

从 QTableWidget 中读取选定的项目

如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和

Python - PyQt - QTable 小部件 - 添加行

在qtable中打开csv文件时程序关闭

如何更改水平标题的高度(QTableWidget)