如何获取QTableWidget的光标下的行

时间:2014-07-09 09:11:55

标签: qt pyqt pyside

有没有办法让鼠标指针下的行号?我想删除一行而不知道行号,但只有光标位置。

编辑:

enter image description here

在此图像中,您可以为资产库添加项目。 单击“删除仓”时,应删除该行。最好的方法是在单击bin时查询Mouse指针下的ROW编号。将行号解析为removeRow函数的位置。 我不知道如何使用QPointer。并且cellEntered需要在添加或重新添加新行时不会保持相同的行/列值。

3 个答案:

答案 0 :(得分:4)

有许多方法可以解决这个问题。有些可能涉及光标位置,而其他可以进入表事件和信号。使用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()

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

答案 1 :(得分:3)

您可能需要使用信号cellEntered和广告符removeRow(如果您正在使用QTableWidget)。有关 PySt 的文档here PyQt here。您可能还需要在 Qt 文档here中查找此主题。

答案 2 :(得分:1)

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

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

通过这种方式,可以直接对模型进行更改。

或者,类似于doru的回答,视图还会实现entered信号和其他信号,通知您对特定模型索引的鼠标操作:

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