最近开发项目用到QTableWidget,基于MainWindow的基础上,当想要实现鼠标右键点击的时候,重写QMousePressEvent发现,右键事件没有响应,折腾了好久,后来通过QT帮助文档对QTableWidget的说明发现,是父窗口的鼠标事件被QTableWidget接管了,需要在QTableWidget中实现,第一种方式,在没有写tablewidget之前,重写一个类继承自QTableWidget,由于,我的tablewidget已经写完了,果断放弃,采用第二种方式实现,废话不多说,直接上代码:
首先设置QTableWidget的属性
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
其次,连接信号和槽,这里是实现了一个右键菜单:
connect(ui->tableWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(rightClickedSlot(QPoint)));
最后,实现槽函数:
void modifyNode::rightClickedSlot(QPoint pos)
{
QTableWidgetItem* item = ui->tableWidget->itemAt(pos);
if (NULL == item)
{
return ;
}
m_iRowClicked = item->row();
qDebug() << "rightClickedSlot == " << m_iRowClicked;
// 弹出右键菜单,
QMenu *pMenu = new QMenu(this);
pMenu->setContextMenuPolicy(Qt::CustomContextMenu);
QAction *pModifyTask = new QAction(QString(u8"修改"),this);// 修改
QAction *pDelTask = new QAction(QString(u8"删除"),this); // 删除
pMenu->addAction(pModifyTask);
pMenu->addAction(pDelTask);
// 连接信号和槽
connect(pModifyTask,SIGNAL(triggered()),this,SLOT(modifyTaskSlot()));
connect(pDelTask,SIGNAL(triggered()),this,SLOT(DelTaskSlot()));
// 右键菜单显示的地方
pMenu->exec(QCursor::pos());
delete pModifyTask;
delete pDelTask;
delete pMenu;
}文章来源:https://www.toymoban.com/news/detail-657684.html
个人粗鄙见解,还请各路大神多多指点。文章来源地址https://www.toymoban.com/news/detail-657684.html
到了这里,关于QTableWidget鼠标右键事件实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!