qt – 使用来自全局QSS的类选择器设置文本区域样式

如何设置作为窗口小部件文本一部分的跨度(例如
一张QLabel)通过全球样式表?

例如.在下面的例子中,foo和bar都应该是红色的.

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>

class
some_label : public QLabel
{
    Q_OBJECT
public:
    some_label(QString text = "") : QLabel(NULL) {
        setText(text);
        show();
    };
};
#include "main.moc"

static const char *css =
        "some_label { color : blue; background : black; }"
        "span.some_class { color : red; }";

int
main(int argc,char **argv)
{
    QApplication a(argc,argv);
    a.setStyleSheet(css);
    some_label label("before "
                     "<span style=\"color:red;\">foo</span> " /* works */
                     "<span class=\"some_class\">bar</span> " /* fails */
                     "after");
    return a.exec();
}

Qmake(Qt 5.1.1)项目文件

QT      += widgets
SOURCES += main.cpp

我真的很感激能够像我一样避免硬编码风格的解决方
与foo跨度.
目标是让应用程序看起来完全由a决定
用户提供的样式表(在示例中由css表示).
目前,我使用的解决方法涉及每个元素的单独标签
这是有色的,维持是一场噩梦.

我已经咨询了一些在线资源以及Blanchette / Summerfield章节
19但这些主要涉及整个小部件的样式.

解决方法

如果您在QLabel加载后不需要更改样式,则可以设计一个系统,在该系统中,您可以从集中样式文件中为每个单词替换所需的颜色:
// These values come from a central,user-supplied style sheet,etc.
QString primary = "red";
QString secondary = "green";

some_label label("before "
                 "<font color=\"" + secondary + "\">foo</font> "
                 "<font color=\"" + primary   + "\">bar</font> "
                 "after");

这个系统有点难以阅读,但它可能比使用许多QLabel有所改进.

(你可能已经注意到了,Qt doesn’t support CSS selection of classes within QLabels.)

相关文章

前言 最近项目做完,用户需要兼容IE,于是开展了兼容性的调整工作。边调整边想感叹IE真是个沙雕。。特将...
前言 有些属性不是很常用,但是工作中遇到了,记录一下,方便学习。 1、text-indent text-indent 属性规...
前言 政府网站会遇到公祭日的时候,网站整体颜色变灰的情况。今天正好调了一下。在此把解决方案分享给大...
需求 项目里有个消息中心,当有消息的时候,小铃铛图标可以晃两下,提示当前有信息。 实现过程 书写css...
html代码 css代码 效果图
在一些界面上 , 如果每个icon都去找图片还是相当麻烦的 , 直接使用css画出icon就方便的多了 , 下面两个...