QSS 样式表能否复用?

王桑的一天 2020-12-07 11:25:22
比如一个QLabel,有一些共同样式 ,然后又有一些细小的差异,比如字体颜色
就比如下面这种:

QLabel#lb { /* 相同的样式部分 */
background: black;
padding: 5px;
font-family: Microsoft YaHei;
font-size: 16px;
}

QLabel#lb_red { /* 差异的样式部分 */
color: red;
}

QLabel#lb_green { /* 差异的样式部分 */
color: green;
}


有两个QLabel,样式一样,除了字体颜色不同,我想共用这个通用的部分,不想在 lb_red, lb_green 里再写这些重复的相同设置了。
可以做到吗?
...全文
2833 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 非弋 的回复:
是可以的,eg:
QLabel{ /* 相同的样式部分,需要注意:这里会把设置范围内的所有QLabel都变成这种样式,注意范围 */
    background: black;
    padding: 5px;
    font-family: Microsoft YaHei;
    font-size: 16px;
}

QLabel#lb_red { /* 差异的样式部分 */
    color: red;
}

QLabel#lb_green { /* 差异的样式部分 */
    color: green;
}
不在范围内的话还有没有啥好方法?
非弋 2020-12-08
  • 打赏
  • 举报
回复
还可以使用属性选择器 QLabel[flat="flase"] 匹配所有属性flat的值为flase的QLabel类型对象
非弋 2020-12-08
  • 打赏
  • 举报
回复
是可以的,eg:
QLabel{ /* 相同的样式部分,需要注意:这里会把设置范围内的所有QLabel都变成这种样式,注意范围 */
    background: black;
    padding: 5px;
    font-family: Microsoft YaHei;
    font-size: 16px;
}

QLabel#lb_red { /* 差异的样式部分 */
    color: red;
}

QLabel#lb_green { /* 差异的样式部分 */
    color: green;
}
  • 打赏
  • 举报
回复
想先设置公有部分再设置私有部分应该是不行的,它应该是只取最后设置的那个的不如换个想法吧,用字符串也不错
  • 打赏
  • 举报
回复
QString publicStyle("QLabel#%1 {" /* 相同的样式部分 */
            "background: black;"
            "padding: 5px;"
            "font-family: Microsoft YaHei;"
            "font-size: 16px;"
            "%2"
        "}");
    QString lb1("color: red;");
    QString lb2("color: green;");

    QString styleSheet;
    styleSheet.append(QString(publicStyle).arg("lb1").arg(lb1)).append(QString(publicStyle).arg("lb2").arg(lb2));
    qDebug()<<styleSheet;
王桑的一天 2020-12-08
  • 打赏
  • 举报
回复
是的,用属性选择器。已经解决了


QLabel#status{ /* 相同的样式部分,需要注意:这里会把设置范围内的所有QLabel都变成这种样式,注意范围 */
background: black;
padding: 5px;
font-family: Microsoft YaHei;
font-size: 16px;
}

QLabel#status[color="red"]{ /* 差异的样式部分 */
color: red;
}

QLabel#status[color="green"]{ /* 差异的样式部分 */
color: green;
}


使用:

QLabel* name = new QLabel(this);
name->setObjectName("status");
name->setProperty("color", "green");

// 修改样式
name->setProperty("color", "red");
name->style()->unpolish(name);
name->style()->polish(name);
name->update();

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧