◎天启疯车℡ 2021-04-12 00:35 采纳率: 100%
浏览 102

为什么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()),还请大佬支招。

  • 写回答

2条回答 默认 最新

报告相同问题?