[QT]创建鼠标右键菜单
第一步:
QWidget及其子类都可有右键菜单,首先设置QWidget与右键菜单有关的函数setContextMenuPolicy()。
如设置QTreeView的相关函数为:treeView->setContextMenuPolicy(Qt::CustomContextMenu);
Qt::ContextMenuPolicy枚举类型包括:Qt::DefaultContextMenu, Qt::NoContextMenu, Qt::PreventContextMenu, Qt::ActionsContextMenu, and Qt::CustomContextMenu,其中如果设置该类型为Qt::CustomContextMenu,则点击鼠标右键会发射信号customContextMenuRequested(const QPoint)。
第二步:
在头文件中声明右键关联的槽函数ShowMouseRightButton(const QPoint); 并且设置信号customContextMenuRequested(const QPoint)与该槽函数的关联,例如:connect(ui.treeView, SIGNAL(customContextMenuRequested(const QPoint)), this, SLOT(ShowMouseRightButton(const QPoint)));
第三步:
实现对应的右键关联的槽函数,如ShowMouseRightButton(const QPoint);
1 void ShowMouseRightButton(const QPoint& pos) 2 { 3 QMenu *qMenu = NULL; 4 5 if (qMenu) 6 { 7 delete qMenu; 8 qMenu = NULL; 9 } 10 11 qMenu = new QMenu(ui.treeView); 12 13 QAction* closePaneAction = new QAction("&Close",this); 14 connect(closePaneAction, SIGNAL(triggered()), this, SLOT(close())); 15 16 QAction* addTreeItemAction = new QAction("&AddItem", this); 17 connect(addTreeItemAction, SIGNAL(triggered()), this, SLOT(AddTreeItem())); 18 19 qMenu->addAction(closePaneAction); 20 qMenu->addAction(addTreeItemAction); 21 22 qMenu->exec(QCursor::pos()); //在鼠标点击的位置显示鼠标右键菜单 23 24 }