您的位置:首页 > 其它

在QWidget 窗口上弹出右键菜单

2016-06-15 22:43 351 查看
Title :
QWidget
窗口上弹出右键菜单的两个方法

Solution 1 :

给一个 QWidget 添加 QActions,设置[b] QWidget 的 contextMenuPolicy 属性为 Qt::ActionsContextMenu 值,使得窗口菜单以这些添加的 QActions 为菜单项组成一个右键菜单。[/b]

1: MyWidget::MyWidget(QWidget *parent)

2:     : QWidget(parent)

3: {

4:     setWindowTitle(tr("Context Menu Show 1"));

5:     //为窗口添加QActions

6:     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],设置[b] QWidget 的 contextMenuPolicy 属性为 Qt::DefaultContextMenu 值,其实默认就是这个值,不用显示设置。[/b]

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会退出程序等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: