2011-08-23 6 views
12

Ho molti bug in semplici QSS (fogli di stile Qt). Sono bug di Qt?Bug di fogli di stile Qt?

Esempio:

enter image description here

Fogli di stile:

#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 
} 

Fonti:

#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 modalità fallback

risposta

8

Per la prima casella di controllo, il problema è da qualche parte in stile Gtk +: enter image description here

QLabel, QPushButton o QCheckBox non supportano le modifiche di carattere (compresi text-decoration) nel selettore CSS :hover pseudo-stato. Il widget più semplice sembra essere QToolButton (che potrebbe essere usato per sostituire i QLabels se davvero necessario).
Le modifiche della tavolozza (colori e stili di primo piano e di sfondo) per quello stato sono supportate da tutti i widget.

4

Non riesco a dire quale sia il problema con la casella di controllo, ma il seguente boccaglio può essere trovato in base al foglio di riferimento di Qt (non riesco a trovarlo online, ma è in Qt Assistant)

QLabel supporta il modello di box. Non supporta lo pseudo-stato: hover.

In altre parole, QLabel: hover non è supportato.

+1

Ma colore: blu per: hover funziona ancora ... – TheHorse

+0

Hai ragione!È strano, perché secondo la loro documentazione non dovrebbe. Tuttavia, per esperienza, so che cambiare la sottolineatura non funziona come ho cercato di fare esattamente quello che stai facendo qui in passato. – Chris

+0

Qt 4.7 SUPPORTO del supporto hover http://doc.qt.nokia.com/latest/stylesheet-syntax.html#pseudo-states – spraff

2

Invece di

// some comment 

uso

/* some comment */ 

. Credo che abbiano scelto quest'ultima forma in quanto è immune alla rottura di nuova linea.

A parte questo, se non è ancora a posto, sembra che ci siano degli errori: https://bugreports.qt-project.org//browse/QTBUG-4307.

Come soluzione alternativa per impostare solo il colore del testo, provare

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

che ha lavorato per me.

+0

I commenti sono stati aggiunti solo nella domanda, non sono presenti nel codice sorgente – TheHorse

+0

@ TheHorse: che avrebbe dovuto essere menzionato nella domanda; così com'è, la mia risposta si applica ancora –

0

Non dovrebbe

color: red 

essere

color: red; 

?

Manca il punto e virgola in alcuni punti del codice inserito.

+1

Un punto e virgola non è richiesto dopo l'ultimo elemento. – TonyK

+1

... o forse è necessario. Qt sta facendo l'analisi non di un browser. Quindi spetta a Nokia implementarlo in qualsiasi modo abbia tempo. Penso che in generale sia una cattiva abitudine assumere che ogni oscura funzione di convenienza dello standard di qualcun altro sia implementata. Se osservi alcune altre classi Qt, troverai sempre qualcosa che non è implementato o implementato in modo diff. Persino i browser non rispettano tutti gli standard. – user440297

+0

Non è cambiato nulla con il punto e virgola – TheHorse