如何检测 QTableView 中的双击

Posted

技术标签:

【中文标题】如何检测 QTableView 中的双击【英文标题】:How to detect doubleClick in QTableView 【发布时间】:2011-05-18 11:07:13 【问题描述】:

我正在使用 PyQt 创建一个 GUI 应用程序。在继承自 QTableView 的视图中,需要检测用户双击一行时选择的行。该表有排序,但没有编辑。

我该怎么做?

注意 - 尝试了 doubleClicked(int) 信号。它是由鼠标按钮发出的,而不是由数据单元发出的,因此它从未被触发。 :(

伊恩

【问题讨论】:

【参考方案1】:

我不明白。 QTableView 的 doubleClicked 信号有签名

void doubleClicked ( const QModelIndex & index )

如果您连接该信号,您应该获得正确的 QModelIndex。

【讨论】:

我尝试了 self.connect(self.tableView,SIGNAL("doubleClicked()"), self.dblClickHandler) 和 self.connect(self.tableView,SIGNAL("doubleClicked(int)") , self.dblClickHandler) - 来自点击的例子。还尝试了 clicked() 和 mouseDoubleClickEvent()。没有触发 我从未尝试过 python 绑定,但您可以尝试 self.connect(self.tableView,SIGNAL("doubleClicked(const QModelIndex&)"), self.dblClickHandler) 如果 const type& 是一个地址(我不太懂 c++),那么这就是 doubleClicked(int) 版本。 不,信号通过字符串标识符连接。因此 SIGNAL() 中的引号 应该是'doubleClicked(QModelIndex)'。【参考方案2】:

不再需要使用信号:

self.your_table.doubleClicked.connect(your_function)

"doubleClicked" 继承自 QAbstractItemView。

【讨论】:

我知道这个线程有点老了,但是当我在做类似的事情时,如何才能在我双击的特定单元格中获取值?【参考方案3】:

一旦你有了modelIndex,(来自上面弗兰克的评论)你可以用它来找到哪个单元格被双击了。

def slotDoubleClicked(self, mi):
    row = mi.row()
    column = mi.column()

然后您可以使用这些 row 和 col 值通过 table.setItem(row, column, newdata) 或其他表格方法访问表格

【讨论】:

【参考方案4】:

就像@regomodo 所说,您可以通过以下方式简单地将您的功能连接到双击:

self.your_table.doubleClicked.connect(your_function)

那么,如果你想知道用户双击了哪一行,你可以使用下面的代码:

for idx in self.your_table.selectionModel().selectedIndexes():
        row_number = idx.row()
        column_number = idx.column()

它将返回一个与行号或列号对应的整数。 当双击删除先前的选择时,将始终只有一个值。

如果您将函数链接到按钮或其他信号,您可以收到包含用户选择的多个元素的列表。

例如,您可以使用以下代码轻松检索所有选定行的列表:

rows = []
for idx in self.your_table.selectionModel().selectedIndexes():
    rows.append(idx.row())
rows = list(set(rows))

这将返回所有选定行的列表(set 函数还将删除所有重复项)。

干杯!

【讨论】:

以上是关于如何检测 QTableView 中的双击的主要内容,如果未能解决你的问题,请参考以下文章

如何检测视图上的双击? [复制]

检测Java Swing中的双击

Objective-c:如何检测视图上的双击?

如何在 UICollectionView 中检测“仅单指”单元格上的双击?

检测 TableView JavaFX 行上的双击

检测 SKNode 上的双击