
tableWidget 重写了一个单击事件 实现的功能是 右键单击 弹出一个菜单窗口 但是重写了 以后这个
前面的 打钩功能失灵了 而且 以前鼠标点击 只能选中一行 现在点着点着 能选中很多行
有老哥知道怎么弄吗
该回答引用ChatGPT
根据问题描述,可以初步判断问题出现在重写了单击事件上。可能是在重写单击事件时,对原有的选中行和打钩功能造成了影响。以下是可能的解决方案:
1. 在重写单击事件时,加入选中行的代码,保证点击一行时只选中该行:
python
def mousePressEvent(self, event):
if event.button() == Qt.RightButton:
menu = QMenu(self)
# 添加菜单项
menu.addAction("菜单项1")
menu.addAction("菜单项2")
menu.exec_(event.globalPos())
else:
# 选中当前行
row = self.currentRow()
self.selectRow(row)
2. 检查重写单击事件的代码是否有误,可能是因为代码逻辑错误导致了问题的出现。
3. 检查是否有其他地方对选中行和打钩功能进行了修改,可能是其他代码对此造成了影响。
以下是一个完整的示例代码,可以参考:
python
from PyQt5.QtWidgets import QApplication, QTableWidget, QMenu, QTableWidgetItem
from PyQt5.QtCore import Qt
class MyTableWidget(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setColumnCount(3)
self.setRowCount(5)
for i in range(5):
for j in range(3):
item = QTableWidgetItem(str(i) + str(j))
self.setItem(i, j, item)
def mousePressEvent(self, event):
if event.button() == Qt.RightButton:
menu = QMenu(self)
# 添加菜单项
menu.addAction("菜单项1")
menu.addAction("菜单项2")
menu.exec_(event.globalPos())
else:
# 选中当前行
row = self.currentRow()
self.selectRow(row)
if __name__ == '__main__':
app = QApplication([])
table = MyTableWidget()
table.show()
app.exec_()
bool DoubleClick::event(QEvent* e)
{
if (e->type() == QEvent::ContextMenu && this->objectName() == "tableWidget")
{
cui->menu->exec(cursor().pos());
}
return QWidget::event(e);
}