QMenu QWidgetAction自定义下拉菜单项鼠标滑过可切换图片(二)

本文在https://blog.csdn.net/zhushentian/article/details/82014760基础上绘制下拉菜单,由于该链接代码没有sheetstlye样式,本文重新给定了样式

菜单效果

在这里插入图片描述

void RPMSystem::AddSetUpMenu()
{
    m_menu = new QMenu(this);
    m_menu->setObjectName("menu_1");
    m_menu->setStyleSheet("QMenu{border: 1px solid rgb(0,142,211);}"
                          "QMenu::item{margin:0px;border:2px solid none;}"
                          "QMenu::item:selected{background-color:rgb(0,142,211);");

    QStringList menu_name;
    menu_name << "serversite" << "changepassword" << "about";
    QStringList menu_text;
    menu_text << QStringLiteral("网络设置") << QStringLiteral("密码修改") << QStringLiteral("About RPMS...");
    for (int i = 0; i < 3;i++)
    {
        QMenuWidget *mw = new QMenuWidget(this);
        QString str = "menu_widget_" + menu_name.at(i);
        mw->setObjectName(str);
        mw->setStyleSheet("QWidget#menu_widget_serversite,#menu_widget_changepassword,#menu_widget_about{"
                            "background-color:none;border: 0px solid;}"
                            "QWidget#menu_widget_serversite[hover=true],#menu_widget_changepassword[hover=true],"
                            "#menu_widget_about[hover=true]{background-color:rgb(0,142,211);}");
        mw->setFixedSize(140, 35);

        QWidget *icon = new QWidget(mw);
        icon->setObjectName("menu_icon_"+menu_name.at(i));
        icon->setStyleSheet("QWidget#menu_icon_serversite[hover=false]{border-image:url(:/resource/mainimage/main_set_net.png);}"
                            "QWidget#menu_icon_serversite[hover=true]{border-image:url(:/resource/mainimage/main_set_net_white.png);}"
                            "QWidget#menu_icon_changepassword[hover=false] {border-image:url(:/resource/mainimage/main_set_password.png);}"
                            "QWidget#menu_icon_changepassword[hover=true] {border-image:url(:/resource/mainimage/main_set_password_white.png);}"
                            "QWidget#menu_icon_about[hover=false] {border-image:url(:/resource/mainimage/main_set_about.png);}"
                            "QWidget#menu_icon_about[hover=true] {border-image:url(:/resource/mainimage/main_set_about_white.png);}");

        icon->setFixedSize(25, 25);
        QLabel *text = new QLabel(mw);
        text->setObjectName("menu_text_"+menu_name.at(i));
        text->setText(menu_text.at(i));
        text->setStyleSheet("QLabel{font-family:'Arial';font-size:14px;color:rgb(0,0,0);qproperty-alignment:'AlignVCenter';}"
                            "QLabel[hover=true]{color:rgb(255,255,255);}");

        QWidget* indicator = NULL;
        if(menu_name.at(i) == "about")
        {
            indicator = new QWidget(mw);
            indicator->setObjectName("menu_sub_"+menu_name.at(i));
            indicator->setFixedSize(8, 12);
            indicator->setStyleSheet("QWidget#menu_sub_about{"
                                     "border-image:url(:/resource/mainimage/right_normal.png);}"
                                     "QWidget#menu_sub_about[hover=true]{"
                                     "border-image:url(:/resource/mainimage/right.png);}");
        }
        mw->SetIconWidget(icon);
        mw->SetTextWidget(text);
        mw->SetSubMenuIndicatorWidget(indicator);
        mw->initWidgets();

        QWidgetAction *wa = new QWidgetAction(m_menu);
        wa->setObjectName("action_" + menu_name.at(i));
        wa->setText(menu_name.at(i));
        wa->setDefaultWidget(mw);
        //mw->SetAction(wa);
        m_widget_acts.append(wa);

    }
    QAction *act3 = new QAction(this);
    act3->setText(QStringLiteral("测试"));

    QMenu *submenu = new QMenu(this);
    submenu->addAction(act3);
    m_widget_acts.at(2)->setMenu(submenu);

    m_menu->addActions(m_widget_acts);
    m_menu->installEventFilter(this);
    m_pSetButton->setMenu(m_menu);
//    m_pSetButton->show();
    connect(m_menu, &QMenu::triggered, this, &RPMSystem::onMenuTriggered);
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值