先来看效果图,鼠标点在哪里菜单显示在哪里。
实现代码
在构造函数中设置右击菜单。并关联右击的槽函数。
ui.tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);//设置右击菜单 connect(ui.tableWidget, &QTableWidget::customContextMenuRequested, this, &QtTableWidgetMenu::onShowMenu);
再根据右击的pos位置,判断点击的QTableWidget位置中是否有Item。如下图空白这种情况,需要过滤掉。
void QtTableWidgetMenu::onShowMenu(QPoint pos) { QTableWidgetItem* selectedItem = ui.tableWidget->itemAt(pos); //获取右击的item if (nullptr == selectedItem) { return; } QMenu* menu = new QMenu(this);//创建菜单 QAction* action = new QAction(u8"查看详细资料", this);//创建一个action menu->addAction(action);//将action放入菜单中 menu->popup(ui.tableWidget->viewport()->mapToGlobal(pos));//将菜单显示到鼠标所在位置 }