QT之自定义菜单

来源:互联网 发布:歌词 知乎 编辑:程序博客网 时间:2024/05/16 00:50

QT之自定义菜单

  • QT之自定义菜单
    • 个人建议
    • 效果图
    • 上代码
    • 下代码
    • 结尾

个人建议

自定义, 自定义, 自定义, 顾名思义就是我们自己设计出来效果的菜单, 再如果我们把这个自定义的菜单封装成一个类, 你觉得会不会更好呢, 我现在写的菜单类,我提供两个接口供你使用, 在你需要的地方new一个, 根本不需要理会我里面做了什么操作, 一样界面友好的效果, 是不是很爽呢~在这里, 我个人建议就是, 我们在设计界面上, 不要全部往里塞, 而是一个空壳子, 什么都没有, 拆分成各个独立的小模块, 减少冗余的代码,和UI设计

这里写图片描述

就像这样的界面,往往里面什么都没有,而是一个空壳子。把我需要的模块动态添加。

效果图

这里两张效果图, 一张是我加了样式的菜单, 一张是默认效果菜单

样式菜单 默认菜单 动态菜单

这两种效果图, 我相信你更倾向于自定义样式的效果图吧~(^__^) 我也知道你能看出其中哪张是默认的,哪张是自定义的 O(∩_∩)O, 好了, 废话不多说了, 我们上代码吧~

上代码

首先来看看, 我封装的自定义菜单类, 而你也只需要拥有这个类, 然后便可召唤出自己的菜单出来吧!

CustomMenu::CustomMenu(QWidget *parent)    : QMenu(parent){    setAttribute(Qt::WA_TranslucentBackground);}CustomMenu::~CustomMenu(){}void CustomMenu::addCustomMenu(const QString& qsName, const QString& icon, const QString& zhName){    QAction *pAction = addAction(QIcon(icon), zhName);    m_menuActionMap.insert(qsName, pAction);}QAction* CustomMenu::getAction(const QString& qsName){    return m_menuActionMap[qsName];}//这里,我只是举例,没添加太多, 而在实际应用中,我们远远不止这些,这可作为你的参考模板,添加属于你自己的菜单封装类.

然后再让我们看看是怎么召唤出菜单类的吧!

void SysTray::onIconActivated(QSystemTrayIcon::ActivationReason reason){    if (reason == QSystemTrayIcon::Trigger)    {        m_parent->show();        m_parent->activateWindow();    }    else if (reason == QSystemTrayIcon::Context)    {        addSysTrayMenu();    }}void SysTray::addSysTrayMenu(){    CustomMenu* customMenu = new CustomMenu(m_parent);    customMenu->addCustomMenu("onBottom", TRAY_ICON_ONDNF,   tr("onBottom"));    customMenu->addCustomMenu("onMusic",  TRAY_ICON_ONMUSIC, tr("onMusic"));    customMenu->addCustomMenu("onFire",   TRAY_ICON_ONFIRE,  tr("onFire"));    customMenu->addCustomMenu("onCar",    TRAY_ICON_ONCAR,   tr("onCar"));    customMenu->addCustomMenu("onLol",    TRAY_ICON_ONLOL,   tr("onLol"));    customMenu->addSeparator();//添加分隔线    customMenu->addCustomMenu("onShow",   TRAY_ICON,         tr("onShow"));    customMenu->addSeparator();//t添加分割线    customMenu->addCustomMenu("onQuit",   CLOSE_MENU,        tr("onQuit"));    connect(customMenu->getAction("onShow"), SIGNAL(triggered(bool)), m_parent, SLOT(onShowNormal()));    connect(customMenu->getAction("onQuit"), SIGNAL(triggered(bool)), m_parent, SLOT(onShowQuit()));    customMenu->exec(QCursor::pos());    delete customMenu;//这里,delete千万别忘记。有NEW就有DELETE嘛(*^__^*),当然了,你可以通过智能指针管理,妈妈就再也不用担心我忘记DELETE啦。}

关于智能指针,可参考C++11智能指针Shared_ptr陷阱

好了,我们的托盘菜单是不是就实现好了,有的小伙伴急了,说到, 你这代码里, 不是没有样式, 你样式怎么弄的?别急,下篇, 我会教大家如何给我们的UI添加漂亮的样式出来。

下代码

关于源码,大家放心,等我把下篇QT之样式讲解完, 我这期的Demo就算讲解完啦, 我就附上这期Demo的工程文件, 当然啦, 免费的,不要你积分 O(∩_∩)O

结尾

只为记录,只为分享! 愿所写能对你有所帮助。Good Good Study, Day Day Up!
如果你觉得我所写的对你有帮助,默默点个赞哈,你的赞就是我最大的支持,嘿嘿~不要说我骗赞哦,(^__^)

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上海居住证没下来换住址了怎么办 工商注册后大股东不注资怎么办 公司不给去办理变更股东信息怎么办 滴滴车主注册没有自己的车型怎么办 代办用虚假地址注册的公司怎么办? 写字楼注册公司租户不租了怎么办 租户没把公司迁出我该怎么办 租户不肯把户口迁出了业主怎么办 同片区个体户营业场所搬迁怎么办 个体领发票的本丢了怎么办 领房产证发票和合同丢了怎么办 税务登记证5年没有办怎么办 二证合一后税务登记证怎么办? 微信漂流瓶打招呼对方收不到怎么办 添加不上徽信好友的微信帐号怎么办 手机号码不用了微信密码忘了怎么办 别人用我的手机号码注册微信怎么办 电脑此网站的安全证书有问题怎么办 起诉离婚开庭时被告不到场怎么办 商标35类被别人注册了怎么办 商标被注销后被别人注册怎么办 电商35类商标被抢注怎么办 血小板太低怎么办可以吃水果吗? 微信好友删除了只记得昵称怎么办 优酷会员1080p很卡怎么办 电脑最下面的任务栏不显示怎么办 ea账号保留的问题忘了怎么办 微博超级话题账号被屏蔽怎么办 梦幻西游手机将军令号码换了怎么办 文档的内容被锁定无法修改怎么办 用户没有权限访问u盘时该怎么办? 电脑找不到ip地址连不上网怎么办 商标提前被别人注册微博昵称怎么办 扫码注册显示手机号被占用怎么办 vivo手机屏锁密码忘了怎么办 手机号注册微博手机号不用了怎么办 微博更换手机号被别人注册过怎么办 怎么有个qq注册验证码怎么办 12306手机丢了密码忘了怎么办 教师考试注册时邮箱填写错误怎么办 计算机二级注册时邮箱填错了怎么办