Qt学习之如何在 QWidget 窗口上弹出右键菜单【转】
转载“我的Qt学习笔记 4 如何在 QWidget 窗口上弹出右键菜单”
目的 :
- QWidget
- 窗口上弹出右键菜单的两个方法
方法 1 :
给一个 QWidget 添加 QActions,设置 QWidget 的 contextMenuPolicy 属性为 Qt::ActionsContextMenu 值,使得窗口菜单以这些添加的 QActions 为菜单项组成一个右键菜单。
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setWindowTitle(tr("Context Menu Show 1")); //为窗口添加QActions addAction(new QAction(tr("&Open"), this)); addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), this)); addAction(new QAction(tr("&Quit"), this)); //设置contextMenuPolicy属性值为 '以Actions为弹出菜单的菜单项组成菜单' setContextMenuPolicy(Qt::ActionsContextMenu); }
效果:
方法 2 :
重写 QWidget 的被保护的虚函数 void QWidget::contextMenuEvent ( QContextMenuEvent * event ) [virtual protected],设置 QWidget 的 contextMenuPolicy 属性为 Qt::DefaultContextMenu 值,其实默认就是这个值,不用显示设置。
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setWindowTitle(tr("Context Menu Show 2")); setContextMenuPolicy(Qt::DefaultContextMenu); //其实不用设置,默认就是这个值 } void MyWidget::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = new QMenu(this); menu->addAction(new QAction(tr("&Open"), menu)); menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu)); menu->addAction(new QAction(tr("&Quit"), menu)); menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上 menu->show(); }
效果:
上面直接是在 contextMenuEvent 函数体里面 new 了个菜单和一些菜单项,这是为了演示。实际在写程序的过程中,我们往往会把这些 QAction 和 QMenu 声明为私有的成员变量,在构造 Widget 的时候,或者第一次调用 contextMenuEvent 时初始化它们,把它们的某些信号(signal)与其它组件的某些槽(slot)连接以处理一些事件,比如说单击上面演示的Open项目会弹出一个对话框,单击Quit会退出程序等等。


浙公网安备 33010602011771号