2013-11-04 12 views
7

Làm cách nào để tạo kiểu cho một khoảng thời gian là một phần của văn bản tiện ích con (ví dụ: một QLabel) thông qua biểu định kiểu toàn cầu?các vùng văn bản tạo kiểu với bộ chọn lớp từ toàn cầu QSS

Ví dụ: trong ví dụ bên dưới, cả hai thanh foo phải có màu đỏ.

#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) tập tin dự án:

QT  += widgets 
SOURCES += main.cpp 

Unsatisfactory result

tôi sẽ thực sự đánh giá cao một giải pháp mà tránh được thể xác định rõ phong cách như tôi đã làm với foo tuổi . Mục tiêu dành cho giao diện ứng dụng được xác định hoàn toàn bằng một mẫu kiểu dáng do người dùng cung cấp (được biểu thị bằng css trong ví dụ). Hiện tại tôi sử dụng giải pháp liên quan đến các nhãn riêng biệt cho từng thành phần có màu và đó là một cơn ác mộng để duy trì.

Tôi đã tham khảo ý kiến ​​một số nguồn trực tuyến cũng như Blanchette/Summerfield chương 19 nhưng chúng chủ yếu liên quan đến tạo kiểu cho toàn bộ tiện ích.

Trả lời

4

Nếu bạn không cần phải thay đổi phong cách sau khi QLabel tải, bạn có thể đưa ra một hệ thống nơi bạn văn bản thay thế các màu sắc mà bạn muốn cho mỗi từ từ một tập tin kiểu tập trung:

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

Hệ thống này có một chút khó đọc nhưng nó có thể là một sự cải tiến khi sử dụng nhiều số QLabel s.

(Như bạn có thể đã nhận thấy, Qt doesn't support CSS selection of classes within QLabels.)

Các vấn đề liên quan