styling text regions with class selector from global QSS

How can I style a span that is part of a widget text (eg a QLabel) via global style sheet?

Eg in below example, both foo and bar should be red.

#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) project file:

QT      += widgets
SOURCES += main.cpp

I would really appreciate a solution that avoids hardcoding the style as I did with the foo span. The goal is for the application look to be determined entirely by a user-supplied style sheet (represented by css in the example). At the moment I use a workaround involving separate labels for each element that is colored and it is a nightmare to maintain.

I have consulted a few online sources as well as Blanchette/Summerfield chapter 19 but those are primarily concerned with styling whole widgets.


If you don't need to change styling after the QLabel loads, you could devise a system where you text-replace the colors you want for each word from a centralized style file:

// 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");

This system is a little hard to read but it could be an improvement over using many QLabel s.

(As you may have noticed, Qt doesn't support CSS selection of classes within QLabels.)

链接地址: http://www.djcxy.com/p/75202.html

上一篇: Visual Studio中的Xamarin F#项目

下一篇: 使用全局QSS中的类选择器设置文本区域样式