qt中qtablewidget设置了cellwidget,比如qcheckbox和qcombobox等,我想点击时,能够激活itemClicked槽函数
时间: 2023-06-25 12:07:19 浏览: 109
可以通过重写`QTableWidget`的`mousePressEvent`函数来实现:
```python
class MyTableWidget(QtWidgets.QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
# ...
def mousePressEvent(self, event):
index = self.indexAt(event.pos())
if index.isValid():
# 如果点击的是单元格的widget,将事件转发给widget
widget = self.cellWidget(index.row(), index.column())
if widget and widget.underMouse():
QtWidgets.QApplication.sendEvent(widget, event)
return
# 如果点击的不是widget,则调用父类的mousePressEvent函数
super().mousePressEvent(event)
@QtCore.pyqtSlot(int, int)
def itemClicked(self, row, column):
print(f"Item clicked: row={row}, column={column}")
```
重写`mousePressEvent`函数,获取点击位置的`QModelIndex`,判断是否是一个cell widget,并且该widget当前处于鼠标下方。如果是,则将事件转发给widget。否则,调用父类的`mousePressEvent`函数。
在`itemClicked`槽函数中处理单元格点击的逻辑。
请注意,如果单元格中的widget是`QCheckBox`或`QComboBox`等可以自行处理鼠标事件的控件,那么它们会自动发出相应的信号,并且不需要通过这种方式来处理。
阅读全文