经常会看到一些菜单的部分项是由几个按钮组成的,如酷狗、QQ、360都有类似菜单,对于常规的菜单项,图标 + 文字 实现一个事件,很容易完成,那么怎么自定义菜单项呢?

Qt提供了支持,就是利用QWidget + QWidgetAction来完成。QWidgetAction继承自QAction,无法通过继承来实现一个界面,但它提供了setDefaultWidget来绑定一个界面,使用起来就更加方便了。

下面实现一个没有Action的菜单,并通过按钮显示出来:

void UserMenu::CreateMenu()
{
    //播放项
    QWidgetAction *pWdtAction = new QWidgetAction(this);
    //播放项界面,继承自QWidget的类
    PlayWidget *playWdt = new PlayWidget(this);
    pWdtAction->setDefaultWidget(playWdt);

    //创建一个包含声音调整控件的界面项
    QWidgetAction *pVoice = new QWidgetAction(this);
    QWidget *pVoiceWdt = new QWidget(this);
    QSlider *pSlider = new QSlider(Qt::Horizontal);
    QHBoxLayout *layout = new QHBoxLayout(pVoiceWdt);
    layout->addWidget(pSlider);
    pVoiceWdt->setLayout(layout);
    pVoice->setDefaultWidget(pVoiceWdt);

    //生成菜单栏
    QMenu *pMenu = new QMenu(this);
    pMenu->addAction(pWdtAction);
    pMenu->addSeparator();
    pMenu->addAction(pVoice);
    pMenu->addAction(QStringLiteral("显示歌词"));
    pMenu->addAction(QStringLiteral("锁定歌词"));
    pMenu->addSeparator();
    pMenu->addAction(QStringLiteral("选项设置"));
    pMenu->addSeparator();
    pMenu->addAction(QStringLiteral("登陆"));
    pMenu->addAction(QStringLiteral("退出"));

    ui.pushButton->setMenu(pMenu);
}

初略效果图如下:

最新文章

  1. Spring的JDBC框架
  2. unity3d 第三人称视角的人物移动以及相机控制
  3. final、finally、finalize的区别
  4. Python 编辑器 tips
  5. python 多线程threading
  6. Spring MVC小结
  7. 快速上手如何使用FluentData
  8. hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup
  9. selenium和Firefox版本不兼容
  10. http://www.cnblogs.com/TankXiao/p/4018219.html
  11. 小qyvlik 先看两个视频,和 QtQuick UI 问答
  12. openStack icehouse for centos6.4 production Env 实战
  13. 全栈必备 JavaScript基础
  14. python编程总结
  15. javascript基础-闭包
  16. 调用本地摄像头拍照(H5和画布)
  17. 学python走过的坑一 类的实例化
  18. 安装Redis 4.0单实例
  19. css3三角形冒泡泡图形制作
  20. MySQL之Haproxy+Keepalived+MySQL高可用均衡负载部署 (网络摘抄)

热门文章

  1. 【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。
  2. mybatis0212 mybatis逆向工程 (MyBatis Generator)
  3. PXC的原理
  4. Python基础教程之List对象 转
  5. 线程控制之线程和I/O
  6. Android:Activity之间跳转和参数传递
  7. OpenVPN中的几个和连接相关的Timer解析
  8. Mac 下配置Tomcat7和eclipse中配置tomcat
  9. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
  10. 解决TableView / ScrollView上的Menu问题(1滑出View区域还可点击2导致点击menu后View不能滑动)