[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 }

 

posted @ 2013-05-29 09:50  云端的思念  阅读(3247)  评论(0编辑  收藏  举报