使用全局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 span那样硬编码风格。 目标是让应用程序看起来完全由用户提供的样式表(在该示例中用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不支持CSS选择QLabels中的类。)
链接地址: http://www.djcxy.com/p/75201.html上一篇: styling text regions with class selector from global QSS