• QT添加右键菜单(二):QWidget的右键菜单策略


    前言:

    上周刚刚发布了一篇博客,是关于使用QMenu类实现添加右键菜单,这才过了没多久,就在网上又发现了另一种添加右键菜单的方式,也就是本篇博客的要介绍的,使用QWidget的内部的右键菜单策略。两种方式实现起来都挺简单的,有兴趣的大佬也可以去下面的链接看看:QT添加右键菜单(一):使用QMenu进行实现。http://t.csdn.cn/0wzLe

    1 .先看效果图

     效果很简单,就是在一个Widget中鼠标右键,弹出一个菜单栏,实现起来也很简单,但是和QMenu的使用方法还是不一样的,里面有些点还是需要记录一下的。

    2.上代码、步骤以相关解释

    1.新建项目的类必须继承子QWidget.

    2.直接在该类的构造函数中加如如下代码

    1. //新建了5个Action
    2. QAction* m_ActionShow = new QAction(tr("Show pet"), this);
    3. QAction* m_ActionHide = new QAction(tr("Hide pet"), this);
    4. QAction* m_ActionModel = new QAction(tr("Model selecte"), this);
    5. QAction* m_ActionSetting = new QAction(tr("Setting widget"), this);
    6. QAction* m_ActionQuit = new QAction(tr("Exit"),this);
    7. //开始添加Action
    8. addAction(m_ActionShow);
    9. addAction(m_ActionHide);
    10. addAction(m_ActionModel);
    11. addAction(m_ActionSetting);
    12. //创建并添加分割线
    13. QAction* separator = new QAction();
    14. separator->setSeparator(true);
    15. addAction(separator);
    16. addAction(m_ActionQuit);
    17. //设置右键菜单策略为上下文菜单
    18. setContextMenuPolicy(Qt::ActionsContextMenu);

    总共代码就这些,实现的效果如本文开始的gif图一样,添加了5个菜单选项,其中还有一条分割线,需要注意的就2个点:

    1.创建添加分割线,也是先 创建一个Action,然后把Action通过setSeparator(true);函数设置为分割线了。

    2. 设置右键菜单策略为上下文菜单,直接调用setContextMenuPolicy(Qt::ActionsContextMenu);这个函数,将QWidgte的快捷菜单策略设置为右键菜单这种形式。

    3.具体深入了解一下QWidget的上下文菜单策略

    setContextMenuPolicy()该函数的参数是一个枚举,枚举值如下:

    enum ContextMenuPolicy {
            NoContextMenu,
            DefaultContextMenu,
            ActionsContextMenu,
            CustomContextMenu,
            PreventContextMenu
        };

    总共5个,每一个的作用都解释下:

    1.Qt::NoContextMenu,本对象不显示右键菜单,由父对象决定,如果本例子中的参数设置为该值,那前面加的Action都没啥用!

    2.Qt::DefaultContextMenu,默认的属性值,当前类的对象调用QWidget::contextMenuEvent()这个函数, 子类可以重写该事件处理函数,然后进行添加Action的操作。

    3.Qt::ActionsContextMenu,将本QWidget的所有QAction作为右键显示的菜单,就是本例中使用到的。

    4.Qt::CustomContextMenu,发送信号QWidget::customContextMenuRequested(), 此时可以写个槽函数,用connect将槽函数和这个信号连接起来,在槽函数里在做添加Action的操作。

    5.Qt::PreventContextMenu,本对象不显示右键菜单,不过与Qt::NoContextMenu不同的是,它不在向上层传递右键菜单命令!

    函数参数的含义和设置为该参数时,该如何使用,大致总结了一下,其他几个参数的具体使用可以亲自实践下。

    4.总结

    弹出一个右键菜单,使用QWidget的上下文菜单策略实现,和使用QMenu实现相比,代码量其实差不多,不过QMenu要重写鼠标按下事件并进行一个判断,多了一步。如果还有大佬知道其他方法实现,可以品论区一起交流学习下!

    兄弟们,一起加油!一起变强!

  • 相关阅读:
    39 深度学习(三):tensorflow.data模块的使用(基础,可跳)
    Kafka生产经验
    2022年深圳技能大赛-大数据技术应用职业技能竞赛介绍
    Python入门、环境搭建、变量、数据类型
    10.ROS编程学习:参数管理机制c++实现
    基于粒子群优化算法、鲸鱼算法、改进的淘沙骆驼模型算法(PSO/SSA/tGSSA)的微电网优化调度(Matlab代码实现)
    智能语音机器人系统和电话系统的区别是什么
    #基于一个小车项目的FREERTOS分析(一)系统时钟
    SpringCache--缓存框架 ----苍穹外卖day7
    拼多多商品详情接口、拼多多商品基本信息、拼多多商品属性接口
  • 原文地址:https://blog.csdn.net/qq_40876689/article/details/126561896