QPushButton下拉式菜单(是否取消下拉三角,是否check)_qpushbutton 菜单_搁浅的渔的博客-程序员秘密

技术标签: qt  qt菜单按钮  

https://blog.csdn.net/u014170207/article/details/78266633

 

给QPushButton添加菜单的示例,前面已经有了三种方式:

Qt学习之给QPushButton添加菜单ActionsContextMenu方法

 

Qt学习之给QPushButton添加菜单CustomContextMenu方法

 

Qt学习之给QPushButton添加菜单DefaultContextMenu方法

今天再提供一种方式,就是给QPushButton添加下拉式菜单。类似于Combobox一样。前面三种方式实现的都是光标在哪个位置,菜单就在哪里显示。而下拉式菜单只在按钮的下方显示,同时会显示下拉三角,效果如下:

要实现下拉菜单,首先需要创建菜单,动作以及按钮本身,为了便于显示效果,另外添加了两个成员函数,用来对应当动作被触发时,显示不同的信息:

 

[cpp] view plain copy

 

  1. m_menu = new QMenu(this);  
  2.     m_addAction = new QAction(m_menu);  
  3.     m_delAction = new QAction(m_menu);  
  4.     m_addAction->setText(QObject::tr("添加"));  
  5.     m_delAction->setText(QObject::tr("删除"));  
  6.     m_menu->addAction(m_addAction);  
  7.     m_menu->addAction(m_delAction);  
  8.     connect(m_addAction, &QAction::triggered, this, &ButtonMenu::addFunc);  
  9.     connect(m_delAction, &QAction::triggered, this, &ButtonMenu::delFunc);  
  10.   
  11.     m_pushButton = new QPushButton(this);  
  12.     m_pushButton->setText(QObject::tr("测试按钮菜单"));  
  13.     m_pushButton->setMenu(m_menu);//设置菜单  

[cpp] view plain copy

 

  1. void ButtonMenu::addFunc()  
  2. {  
  3.     qDebug() << "addFunc";  
  4. }  
  5.   
  6. void ButtonMenu::delFunc()  
  7. {  
  8.     qDebug() << "delFunc";  
  9. }  

编译运行,出现了一个问题,汉字乱码。

 

因为我是VS2013+Qt,所以解决乱码问题在头文件中添加一句话。

 

[cpp] view plain copy

 

  1. #pragma execution_character_set("utf-8")  

对于按钮上的下拉三角图标,如果不需要的话,可以通过QSS来取消:

[cpp] view plain copy

 

  1. m_pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");//不显示下拉图片  

 

可以看到小三角不显示了:


如果需要动作点击后,有明显的指示,也就是状态,如下:


只需要设置QAction可以check就可以了:

 

[cpp] view plain copy

 

  1. m_addAction->setCheckable(true);//是否可以check  
  2.     m_delAction->setCheckable(true);//是否可以check  

最后,运行成功,点击对应的动作,可以看到控制台输出:

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36583051/article/details/100114317

智能推荐

计算机二级C语言公共基础知识,以及习题总结(二)树和二叉树_计算机二级二叉树知识点_蓝匣子itbluebox的博客-程序员秘密

五、树和二叉树,树的基本概念,数是一种简单的非线性结构,二叉数及其基本性质,二叉数的存储结构,二叉数的变量,二叉数及其基本性质,二叉树的遍历,二叉树的遍历的练习二叉树当中结点数是奇数的时候有度为1个结点0个(满二叉树),当二叉树当中的结点数为偶数的时候度为1的结点个数为1个(完全二叉树)。3、二叉数的存储结构4、二叉数的变量5、相关练习CC扩展: 二叉树一个结点下面可能有两个子结点(度为2),也可能有一个子结点(度为...

browser_jianhuming的博客-程序员秘密

      计算机从最初的单机发展到今天的网络时代,以前的计算机的应用主要靠一个单独的机子在工作。但是今天网络时代的来临使得计算机的使用更多的依赖于网络这个大家庭的支持。今天计算机的使用更多的是共享网络中的内容或者从网络中获取所需的最新内容。然而在未来的新时代,计算机的使用更多的是通过网络这个平台,使用网络中的公共资源,来解决自己的问题。      今天我们的计算机需要安装很多的软件来满足的用

人群计数:Crowd Density Estimation Using Fusion of Multi-Layer Features(TITS2020)_通信程序猿的博客-程序员秘密

本博文主要是介绍一篇发表在IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS上的人群计数方案《Crowd Density Estimation Using Fusion of Multi-Layer Features》AbstractIntroductionRelated workExperiments

图的邻接矩阵的建立(C语言实现)_图的邻接矩阵的建立c语言_OutMicro的博客-程序员秘密

#include #include typedef char VertexType;typedef int EdgeType;#define MAXVEX 100#define INFINITY 65535typedef struct {VertexType vers[MAXVEX];EdgeType arc[MAXVEX][MAXVEX];int numVertexes,num

数据结构实验之链表九:双向链表_数据结构双向链表实验报告_肉丸不肉的博客-程序员秘密

在双向链表中,A有一个指针指向了节点B,同时,B又有一个指向A的指针。这样不仅能从链表头节点的位置遍历整个链表所有节点,也能从链表尾节点开始遍历所有节点。对于给定的一列数据,按照给定的顺序建立双向链表,按照关键字找到相应节点,输出此节点的前驱节点关键字及后继节点关键字。 Input 第一行两个正整数n(代表节点个数),m(代表要找的关键字的个数)。第二行是n个数(n个数没有重复),利用这n个数建

随便推点

内存管理初级_Yz_iOS的博客-程序员秘密

// iOS应用程序出现Crash(闪退),90%以上的原因是内存问题。在一个拥有数十个甚至上百个类的工程里,查找内存问题及其困难。了解内存常见问题,能帮我们减少出错几率。内存问题体现在两个方面:内存溢出,野指针异常。垃圾回收:程序员只需要开辟内存空间,不需要用代码显示地释放,系统来判断哪些空间不再被使用,并回收这些内存空间,以便再次分配。整个回收过程不需要写任何代码,有系统自动完成垃

为何在JDK安装路径下存在两个JRE?_AA747604141的博客-程序员秘密

"两个jre"和"三个lib"的功能简单扼要的解释    安装JDK后,Java目录下有jdk和jre两个文件夹,但jdk下还有一个jre文件夹,而且这个jre比前面那个jre在bin目录下多了个server文件夹!     普通用户装jre即可。开发人员需要安装jdk,其中包括jre。所以jdk目录下包括jre目录。两个jre大体相同,有细微的差别。     两套 jre ,是针

excel模板 基金账本_专项基金拨款记录EXCEL图表_呵呵米的博客-程序员秘密

开通会员成为办公会员,即可享受海量下载,每日仅需要0.1元。点击查看详情 &gt;&gt;我图网提供原创专项基金拨款记录EXCEL图表下载,模板编号为26978736,大小为0.17 MB,作品由QQ1842468F上传到我图网,作品高清大图模板,格式为XLSX,属于财务报表模板分类本高清模板,作品模板源文件下载后可用Excel编辑替换,模板中如有人物画像仅供参考禁止商用。【特殊限制】设计师仅对作...

vue中自定义指令、组件化、生命周期、节流和防抖、获取DOM、mint-ui简介、过渡和动画_苦海123的博客-程序员秘密

自定义指令:vue中通过directive方法自定义指令,如:自定义一个v-focus指令: &lt;script&gt; Vue.directive('focus', {//通过directive('指令名',{配置})注册全局指令 inserted: function (el) {//inserted:表示当自定义指令插入元素后,后面跟处理函数 el.focus()//通过原生API获取光标 } }) //实例化: new Vu

作业_private ·的博客-程序员秘密

w3d4:var vm=new Vue({ el:"#app", data:{ msg: "我是msg之中的内容", msg2: "我是msg之中的内容2", html1:"&lt;h2&gt;我是一段html文字&lt;/h2&gt;", }});3、什么是MVVM模式,这样设计有什么优点4、使用vue将下列da...

solidworks 添加 matlab插件 simmechanics 导出xml文件_slidworks导出xml插件_ssj520yyf的博客-程序员秘密

1. 在已安装solidworks和matlab的基础上(我安装的是solidworks2015及Matlab2014a,电脑系统64位)     到mathworks 官网下载对应版本的simlinkhttps://cn.mathworks.com/products/simmechanics/download_smlink.html共需下载两个文件:smlink.r2014a.w