【问题标题】:How to get the row under the cursor for a QTableWidget如何获取 QTableWidget 光标下的行
【发布时间】:2014-07-09 09:11:54
【问题描述】:

有没有办法获取鼠标指针下的行号?我想在不知道行号的情况下删除一行,而只使用光标位置。

编辑:

在此图像中,您可以为资源库添加项目。 单击删除箱时,应删除该行。最好的方法是在单击 bin 时查询鼠标指针下的 ROW 编号。其中行号被解析为 removeRow 函数。 我不知道如何使用 QPointer。并且 cellEntered 需要在添加或删除新行时不会保持不变的行/列值。

【问题讨论】:

    标签: qt pyqt pyside


    【解决方案1】:

    有许多方法可以解决这个问题。有些可能涉及光标位置,有些可能涉及表事件和信号。使用 QCursor 解决此问题的一个问题是,如果有人使用键盘触发按钮而不是鼠标单击,这意味着光标位置可能无法反映正确的行。

    既然你已经在使用高级QTableWidget,那么这里有一个非常简单的方法:

    from functools import partial
    
    class Table(QtGui.QWidget):
    
        def __init__(self):
            super(Table, self).__init__()
    
            self.table = QtGui.QTableWidget(3, 2, self)
    
            for row in xrange(3):
                item = QtGui.QTableWidgetItem("Item %d" % row)
                self.table.setItem(row, 0, item)
    
                button = QtGui.QPushButton("X", self.table)
                self.table.setCellWidget(row, 1, button)
    
                button.clicked.connect(partial(self._buttonItemClicked, item))
    
            layout = QtGui.QHBoxLayout(self)
            layout.addWidget(self.table)
    
        def _buttonItemClicked(self, item):
            print "Button clicked at row", item.row()
    

    在本例中,我们只是将第一列的项目烘焙到 clicked 回调中,因此当您单击它们时,它们有一个询问行号的参考。对于较低级别的模型/视图,该方法会有所不同。

    【讨论】:

    • @Jérôme,看起来您已经通过编辑获得了答案...以确保添加可以跟踪行的QTableWidgetItem
    • 我还使用 QtCore.QPersistentModelIndex 得到了更好的答案。
    【解决方案2】:

    您可能需要使用信号cellEntered 和插槽removeRow(如果您使用的是QTableWidget)。请参阅文档 here 了解 PySidehere 了解 PyQt。您可能还需要在 Qt 文档here 中查找此主题。

    【讨论】:

      【解决方案3】:

      假设删除应该发生,例如单击鼠标,所有视图都有indexAt 方法, 这会将任何光标/鼠标位置映射到模型索引:

      modelIndex = myView.indexAt(cursorLocation) # where cursorLocation is a QPoint instance
      

      这样,对模型进行更改就很简单了。

      另外,类似于 doru 的回答,视图也实现了entered 信号等,通知您鼠标在某个模型索引上的操作:

      http://qt-project.org/doc/qt-4.8/qabstractitemview.html#signals

      【讨论】:

      • 在我的项目中我使用了表格小部件,你能告诉我我们如何知道光标在表格小部件中闪烁的位置吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多