Title :
Solution 1 :
给一个 QWidget 添加 QActions,设置 QWidget 的 contextMenuPolicy 属性为 Qt::ActionsContextMenu 值,使得窗口菜单以这些添加的 QActions 为菜单项组成一个右键菜单。
1: MyWidget::MyWidget(QWidget *parent)
2: : QWidget(parent)
3: {
4: setWindowTitle(tr("Context Menu Show 1"));5: //为窗口添加QActions6: addAction(new QAction(tr("&Open"), this));7: addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), this));8: addAction(new QAction(tr("&Quit"), this));9: //设置contextMenuPolicy属性值为 ‘以Actions为弹出菜单的菜单项组成菜单‘10: setContextMenuPolicy(Qt::ActionsContextMenu);
11: }
效果:
Solution 2 :
重写 QWidget 的被保护的虚函数 void QWidget::contextMenuEvent ( QContextMenuEvent * event ) [virtual protected],设置 QWidget 的 contextMenuPolicy 属性为 Qt::DefaultContextMenu 值,其实默认就是这个值,不用显示设置。
1: MyWidget::MyWidget(QWidget *parent)
2: : QWidget(parent)
3: {
4: setWindowTitle(tr("Context Menu Show 2"));5: setContextMenuPolicy(Qt::DefaultContextMenu); //其实不用设置,默认就是这个值6: }
7:
8:
9: void MyWidget::contextMenuEvent(QContextMenuEvent *event)10: {
11: QMenu *menu = new QMenu(this);12: menu->addAction(new QAction(tr("&Open"), menu));13: menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu));14: menu->addAction(new QAction(tr("&Quit"), menu));15: menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上16: menu->show();
17: }
效果:
上面直接是在 contextMenuEvent 函数体里面 new 了个菜单和一些菜单项,这是为了演示。实际在写程序的过程中,我们往往会把这些 QAction 和 QMenu 声明为私有的成员变量,在构造 Widget 的时候,或者第一次调用 contextMenuEvent 时初始化它们,把它们的某些信号(signal)与其它组件的某些槽(slot)连接以处理一些事件,比如说单击上面演示的Open项目会弹出一个对话框,单击Quit会退出程序等等。
如何在 QWidget 窗口上弹出右键菜单,布布扣,bubuko.com
原文:http://www.cnblogs.com/jiangzhaowei/p/3593711.html