最近在学习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);
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。