为什么Qt使用属性选择器更改不了按钮Image?

最近在学习Qt,于是就想参照TIM界面,具体问题就是TIM的那个登陆方式是QQ还是微信,根据点击切换页面和改变按钮图片,问题就出在改变图片。

我用Qss样式表给它设置鼠标悬浮图片和不同状态下的图片(路径、图片有效已反复试过),具体qss代码如下:

QPushButton#btn_mode_qq[status="true"],
QPushButton#btn_mode_qq[status="false"]:hover {
	image: url(:/res/ico/res/ico/ico_qq_active.svg);
}

QPushButton#btn_mode_qq[status="false"] {
	image: url(:/res/ico/res/ico/ico_qq_normal.svg);
}

QPushButton#btn_mode_wechat[status=true],
QPushButton#btn_mode_wechat[status=false]:hover {
	image: url(:/res/ico/res/ico/ico_wechat_active.svg);
}

QPushButton#btn_mode_wechat[status=false] {
	image: url(:/res/ico/res/ico/ico_wechat_normal.svg);
}

上面和下面不同的是有个双引号,我只是想试试,是不是双引号影响了结果,但发现,默认的显示还是默认的,悬浮有效,但false那儿无效。具体到控制代码是:

void Login::init_theme()
{
    // 配置全局样式表
    QFile qss(":/login/qss_login.qss");
    if (qss.open(QFile::ReadOnly))
    {
        QString style = QLatin1String(qss.readAll());
        this->setStyleSheet(style);
        qss.close();
    }
    else
    {
        qDebug("Fail to load style sheet.");
    }

    // ......此处省略一堆配置

    // 设置初始选择登陆模式按钮属性
    if (0 == ui->twg_login_mode->currentIndex())
    {
        ui->btn_mode_qq->setProperty("status", "true");
        ui->btn_mode_wechat->setProperty("status", "false");
    }
}

void Login::on_btn_mode_qq_clicked()
{
    ui->twg_login_mode->setCurrentIndex(0);
    ui->btn_mode_qq->setProperty("status", true);
    ui->btn_mode_wechat->setProperty("status", false);
}

void Login::on_btn_mode_wechat_clicked()
{
    ui->twg_login_mode->setCurrentIndex(1);
    ui->btn_mode_qq->setProperty("status", false);
    ui->btn_mode_wechat->setProperty("status", true);
}

其他样式都没问题,这个按钮样式也没被覆盖(只在类选择器设置了取消所有按钮边框)

结果就是,启动默认加载了图标QQ(亮)微信(灭),悬浮微信(亮),点击微信,下面的QTabWidget切换到了微信页面,但还是默认的QQ(亮)、微信(灭)【理论应该是QQ(灭)微信(亮)】。

所以现在不懂是什么缘故,导致切换属性选择器不成功。(目前不考虑“按钮组”和代码内使用setStyleSheet()),还请大佬支招。

原来是没有重新加载css(qss),也就是styleSheet,因为我用的是qss是加载进更大的布局Frame里,所以只需要重新加载Frame的样式表即可。

void Login::reload_theme()
{
    QString style_sheet = ui->fr_main->styleSheet();
    ui->fr_main->setStyleSheet("");
    ui->fr_main->setStyleSheet(style_sheet);
}

 

感谢这篇被删掉但仅剩快照的博文:http://cache.baiducontent.com/c?m=thZJmL6N04hmzwYg12WcF8UIdKVqdTYsnBgV8guXNuUsOIkhp92uayoT0toO_L-v8in91jtZ2gltR6PiWjiGx6qwerlIDagYL1Lyxq09gOX30vphwlUlutSJjTGk60NqPEiHztDFUNdNT97p5BPu7bXmN8dbIzR8RO1VHOV--76un_mb9373QxOkalyuSf6H&p=882a94408fd506fc57efdc2c155c&newp=c463c9068f934eae5db7c7710f5192695d0fc20e3bd2d701298ffe0cc4241a1a1a3aecbf2c241b02d9c57f6102af4958e0fb37723d0034f1f689df08d2ecce7e75&s=cfcd208495d565ef&user=baidu&fm=sc&query=qss%CA%F4%D0%D4%D1%A1%D4%F1%C6%F7%CE%DE%D0%A7&qid=ab003052000482a8&p1=12

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。