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!
如果你觉得我所写的对你有帮助,默默点个赞哈,你的赞就是我最大的支持,嘿嘿~不要说我骗赞哦,(^__^)

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨田哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值