2011-08-23 8 views
12

Tengo muchos errores en QSS simple (hojas de estilo Qt). ¿Son errores de Qt?Qt style sheets bugs?

Ejemplo:

enter image description here

Las hojas de estilo:

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

Fuentes:

#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 fallback mode

Respuesta

8

Por primera casilla, el problema está en algún lugar en el estilo GTK +: enter image description here

QLabel, QPushButton o QCheckBox no admiten cambios de fuentes (incluyendo text-decoration) en el selector CSS :hover pseudo-estado. El widget más simple que parece ser QToolButton (que podría usarse para reemplazar QLabels si realmente lo necesita).
Los cambios de paleta (colores y estilos de primer plano y fondo) para ese estado son compatibles con todos los widgets.

4

No puedo decir cuál es el problema con su casilla de verificación, pero el siguiente tidbit se puede encontrar en la referencia de hoja de estilo de Qt (No puedo encontrarlo en línea, pero está en Qt Assistant)

QLabel es compatible con el modelo de caja. No es compatible con: pseudoestado de flotación.

En otras palabras, QLabel: hover no es compatible.

+1

Pero color: azul para: hover todavía funciona ... – TheHorse

+0

¡Tienes razón!Eso es extraño, porque según su documentación, no debería. Sin embargo, sé por experiencia que cambiar el subrayado no funciona, ya que he intentado hacer exactamente lo que estás haciendo aquí en el pasado. – Chris

+0

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

2

En lugar de

// some comment 

uso

/* some comment */ 

. Supongo que eligieron la última forma ya que es inmune a la ruptura de línea nueva.

Aparte de eso, si todavía no está bien, entonces parece que se ha encontrado con errores: https://bugreports.qt-project.org//browse/QTBUG-4307.

Como una solución única para establecer el color del texto, probar

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

que funcionó para mí.

+0

Los comentarios se han agregado solo a la pregunta, no existen en el código fuente – TheHorse

+0

@TheHorse: eso debería haberse mencionado en la pregunta; como es, mi respuesta todavía se aplica –

0

En caso de no

color: red 

ser

color: red; 

?

Faltan puntos y comas en algunos lugares del código publicado.

+1

No se requiere un punto y coma después del último elemento. – TonyK

+1

... o tal vez se requiera. Qt está haciendo el análisis no de un navegador. Entonces, le toca a Nokia implementarlo de la forma en que tengan tiempo. Creo que, en general, es un mal hábito suponer que se implementan todas las funciones de conveniencia poco conocidas del estándar de otra persona. Si miras otras clases de Qt, siempre encontrarás algo que no está implementado o implementado de manera diferente. Incluso los navegadores no cumplen con todos los estándares. – user440297

+0

Nada cambió con punto y coma – TheHorse