[我正在使用 PyQt4,但我认为这个 Qt4 问题不是 Python 特有的。]
我有一个QTableWidget
. 在每一行中,第一列包含一个按钮。单击时,该行将被删除。
要删除行,我使用removeRow(int row)
方法,该方法将行的索引作为参数。连接信号时,我不知道行的索引,因为它可能会同时发生变化(例如,如果第一行被删除,所有行索引都会改变)。
这里接受的答案建议将回调传递给行中的 QTableWidgetItem 实例,然后在删除时从该项目中获取行号。
这会很好,除非该行的所有元素都不是QTableWidgetItem
. 元素是按钮本身和一些组合框。
我想不出办法解决这个问题。
我可以以某种方式将我的元素之一放入 QTableWidgetItem 吗?我应该在某种隐藏列中添加 QTableWidgetItem 吗?
我们当前的实现使用indexAt(QtGui.qApp.focusWidget())
(请参阅上述问题的其他答案),这对我来说似乎是一个抱歉的解决方法。
如果我用这样的可检查 QTableWidgetItem 替换按钮
rm_item = QtGui.QTableWidgetItem()
rm_item.setFlags(QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsEnabled)
我有一个 QTableWidgetItem 可以用来返回行索引。但是我不知道如何像使用按钮一样从中捕获“已检查”或“单击”事件。我发现的只是 的itemClicked
信号QTableWidget
,但是我必须过滤掉所有其他小部件。
必须有一些明显的东西我错过了。
编辑
从我在这里读到的内容,我可以将带有 setItem 的 QTableWidgetItem 和带有 setCellWidget 的 Button 小部件添加到同一个单元格。这对我来说似乎不太自然,但显然它有效(现在无法测试)。
我想我会那样做。添加 Button,并在同一单元格上添加一个虚拟 QTableWidgetItem 作为对行的引用。
这就是它的本意吗?
编辑 2
或者也许QTableWidget
不是正确的小部件,我应该使用Layout
,正如这里所建议的那样。