关于 qt:使用全局 QSS 中的类选择器对文本区域进行样式设置

styling text regions with class selector from global QSS

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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) 工程文件:

1
2
QT      += widgets
SOURCES += main.cpp

Unsatisfactory

1
2
3
4
5
6
7
8
// 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 不支持 QLabels 中的 CSS 选择类。)