如何检测 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 中的双击的主要内容,如果未能解决你的问题,请参考以下文章