Qt中的上下文菜单 ContexMenu

Qt中的上下文菜单 ContexMenu

2018-02-26 23:19:46 SallenKey 阅读数 549更多

分类专栏: Qt笔记 Qt笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/xiaoyink/article/details/79382920

Qt实现上下文菜单

 

一、重载contextMenuEvent()事件处理函数,在重载的contextMenuEvent函数中显示QMenu对象:

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
 
class QMenu;
class QAction;
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
protected:
    void contextMenuEvent(QContextMenuEvent *event);
 
private:
    Ui::Widget *ui;
    QMenu * menu;
    QAction * openAction;
    QAction * saveAsAction;
};
 
#endif // WIDGET_H
 

 

widget.cpp文件

 
  1. #include "widget.h"

  2. #include "ui_widget.h"

  3. #include <QMenu>

  4. #include <QAction>

  5. #include <QContextMenuEvent>

  6.  
  7. Widget::Widget(QWidget *parent) :

  8. QWidget(parent),

  9. ui(new Ui::Widget),

  10. menu(new QMenu(this)),

  11. openAction(new QAction(QStringLiteral("打开"), this)),

  12. saveAsAction(new QAction(QStringLiteral("另存为"), this))

  13. {

  14. ui->setupUi(this);

  15. menu->addAction(openAction);

  16. menu->addAction(saveAsAction);

  17. }

  18.  
  19. Widget::~Widget()

  20. {

  21. delete ui;

  22. }

  23. void Widget::contextMenuEvent(QContextMenuEvent *event)

  24. {

  25. //显示菜单到鼠标右击即event发生的坐标处,这两种写法都行,最终都是用全局坐标

  26. //this->menu->exec(this->mapToGlobal(event->pos()));

  27. this->menu->exec(event->globalPos());

  28. }

二、添加QAction对象到父窗口,即要设置上下文菜单的窗口,然后设置父窗口属性为Qt::ActionsContextMenu:

只需将Widget类的构造函数做如下更改,并去掉对contextMenuEvent函数的重载:

 
  1. Widget::Widget(QWidget *parent) :

  2. QWidget(parent),

  3. ui(new Ui::Widget),

  4. menu(new QMenu(this)),

  5. openAction(new QAction(QStringLiteral("打开"), this)),

  6. saveAsAction(new QAction(QStringLiteral("另存为"), this))

  7. {

  8. ui->setupUi(this);

  9. //menu->addAction(openAction);

  10. //menu->addAction(saveAsAction);

  11. this->addAction(openAction);

  12. this->addAction(saveAsAction);

  13. this->setContextMenuPolicy(Qt::ActionsContextMenu);

  14. }

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值