记一次QT的QSS多个控件设置同一个样式的问题

Qt样式表的格式问题

问题的引入

最近在进行样式设计的时候,发现了一个问题,具体如下:
我是将所有样式写到.qss文件里,然后读取文件的内容,再qApp->setStyleSheet();
代码如下:

QString qss;
QFile qssFile;
qssFile.setFileName(":/style1920.qss");

qssFile.open(QFile::ReadOnly);
if(qssFile.isOpen())
{
    qss = QLatin1String(qssFile.readAll());
    qApp->setStyleSheet(qss);
    qssFile.close();
}

然后这里是的我样式表文件的部分:

EditInfo QPushButton#btnCancel, #btnConfirm, #btnReturn, #btnDel, #btnUpload
{
    background: #004AA9;
    border-radius: 4px;
    font: 400 14px "Microsoft YaHei";
    color: rgba(255, 255, 255, 1);
    line-height: 24px;
}

InfoCard QPushButton#btnEdt, #btnDel, #btnDetail
{
    background-color: rgb(85, 255, 255);
    border-radius: 4px;
}

我是创建了两个类,一个是EditInfo,一个是InfoCard,这两个类的ui里都有两个QPushButton,且objectName都为btnDel。
但是我发现,像上面这样写,按钮的样式都是后面的InfoCard的样式。我实在是写了一个EditInfo和InfoCard作为类选择器啊,为啥不起作用呢?

qss 选择器

qt的qss选择器的具体内容可以看这里:QSS 选择器-公孙二狗

问题所在

对于这个问题,突然我灵光一闪,是不是因为间隔一个逗号之后,选择器也要重新写,并不能接着前面的。然后我试了一下,

EditInfo QPushButton#btnCancel, #btnConfirm, #btnReturn, EditInfo QPushButton#btnDel, #btnUpload
{
    background: #004AA9;
    border-radius: 4px;
    font: 400 14px "Microsoft YaHei";
    color: rgba(255, 255, 255, 1);
    line-height: 24px;
}

InfoCard QPushButton#btnEdt, InfoCard QPushButton#btnDel, #btnDetail
{
    background-color: rgb(85, 255, 255);
    border-radius: 4px;
}

诶,就可以了。样式就变成了正常的了。
也就是说,我之前错误的原因是因为,我在逗号之后没有重新组合选择器,所以解析出来的就是,将objectName为btnDel的控件统统按照下面的样式设置,所以就出现了冲突。这也是对于qss的基础知识没有学好,所以说就吃了这个亏。
若要进行多个控件是同一个样式,就需要在逗号之后,重新进行选择器的组合。
但是也要强调的一点是,尽量让每一个控件的objectName都是唯一的,这样设置起来更方便。

Reference

The Style Sheet Syntax
QSS 选择器
QT qss选择器------ID 选择器

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值