2011-08-23 120 views
12

我在簡單的QSS(Qt樣式表)中有許多錯誤。是Qt的錯誤嗎?Qt樣式表錯誤?

實施例:

enter image description here

樣式表:

#check1 { 
    color: red     //didn't work here 
} 

#check2 { 
    color: red;     //but work here 
    background-color: black 
} 

#label1 { 
    color: blue; 
    text-decoration: underline //work fine here 
} 

#label2:hover { 
    color: blue; 
    text-decoration: underline //but didn't work here 
} 

來源:

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    app.setStyleSheet(" #check1 {color: red} \ 
         #check2 {color: red; background-color: black} \ 
         #label1 {color: blue; text-decoration: underline} \ 
         #label2:hover {color: blue; text-decoration: underline}"); 
    QWidget w; w.setFixedSize(120,130); 

    QCheckBox check1("checkbox1",&w); 
    check1.setObjectName("check1"); 
    check1.move(10,0); 

    QCheckBox check2("checkbox1",&w); 
    check2.setObjectName("check2"); 
    check2.move(10,30); 

    QLabel label1("label1", &w); 
    label1.setObjectName("label1"); 
    label1.move(10,60); 

    QLabel label2("label2", &w); 
    label2.setObjectName("label2"); 
    label2.move(10,90); 
    w.show(); 

    return app.exec(); 
} 

QT 4.7.3-3; arch linux; GNOME 3回退模式

回答

8

對於第一複選框,問題是某處GTK +樣式: enter image description here

QLabelQPushButtonQCheckBox不支持在:hover僞狀態CSS選擇字體的變化(包括text-decoration)。最簡單的部件似乎是QToolButton(如果您真的需要,可以用它來替換QLabels)。
所有小部件都支持該狀態的調色板更改(前景和背景顏色和樣式)。

4

我不能說什麼與你的複選框的問題,但下面的珍聞可以根據Qt的樣式表參考文獻中找到(我不能在網上找到它,但它在Qt的助手)

QLabel支持盒子模型。不支持:懸停僞狀態。

換句話說,不支持QLabel:hover。

+1

但是顏色:藍色適用於:懸停仍然有效... – TheHorse

+0

你說得對!這很奇怪,因爲根據他們的文檔,它不應該。然而,我從經驗中知道,改變下劃線不起作用,因爲我試圖去做你過去在這裏做的事。 – Chris

+0

Qt 4.7 DOES支持懸停http://doc.qt.nokia.com/latest/stylesheet-syntax.html#pseudo-states – spraff

2

而不是

// some comment 

使用

/* some comment */ 

。我想他們選擇了後一種形式,因爲它不受換行符破壞的影響。

除此之外,如果它仍然不好,那麼看起來你已經遇到了錯誤:https://bugreports.qt-project.org//browse/QTBUG-4307

至於僅設置文本顏色的解決辦法,嘗試

#check1:hover { color:red; background-color:transparent; } 

這爲我工作。

+0

評論已被添加到問題中,它們不存在於源代碼中 – TheHorse

+0

@TheHorse:應該在問題中提到過;因爲我的答案仍然適用 –

0

不應該

color: red 

color: red; 

缺少分號在您的發佈代碼中的幾個地方。

+1

最後一項之後不需要分號。 – TonyK

+1

...或者它是必需的。 Qt是在解析不是一些瀏覽器。所以諾基亞有時間以任何方式實施它。我認爲一般來說,假設別人標準的每個模糊便利特徵都被實現,這是一種壞習慣。如果你看看其他一些Qt類,你總會發現一些沒有被實現或以差異方式實現的東西。即使瀏覽器也沒有跟上所有的標準。 – user440297

+0

沒有用分號改變 – TheHorse