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

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

我该怎么做?

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

伊恩

【问题讨论】:

    标签: qt qt4 pyqt


    【解决方案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 函数还将删除所有重复项)。

      干杯!

      【讨论】:

        猜你喜欢
        • 2015-12-01
        • 2011-01-14
        • 2015-11-09
        • 1970-01-01
        • 2020-11-06
        • 2015-06-23
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多