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 |
我真的很感激能像我一样避免对样式进行硬编码的解决方案
与 foo 跨度。
目标是让应用程序看起来完全由
用户提供的样式表(在示例中由
目前,我使用一种解决方法,涉及每个元素的单独标签
那是彩色的,维护起来简直是一场噩梦。
我查阅了一些在线资源以及布兰切特/萨默菲尔德章节
19 但那些主要关注整个小部件的样式。
如果您在
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"); |
这个系统有点难以阅读,但它可能比使用许多
(您可能已经注意到,Qt 不支持 QLabels 中的 CSS 选择类。)