有没有办法让鼠标指针下的行号?我想删除一行而不知道行号,但只有光标位置。
编辑:
在此图像中,您可以为资产库添加项目。 单击“删除仓”时,应删除该行。最好的方法是在单击bin时查询Mouse指针下的ROW编号。将行号解析为removeRow函数的位置。 我不知道如何使用QPointer。并且cellEntered需要在添加或重新添加新行时不会保持相同的行/列值。
答案 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