2011-03-31 10 views
12

Tengo un QLabel con una hoja de estilo Qt que establece un fondo oscuro:¿Cómo personalizo la apariencia de los enlaces en QLabels usando hojas de estilo?

QLabel { 
background: black; 
color: white; 
} 

Esto funciona bien hasta que añadir texto con un URL incorporado y establecer el Qt::TextFormat-Qt::RichText. El enlace se muestra como el azul oscuro predeterminado, que es difícil de leer en un fondo oscuro.

He intentado personalización a través de una hoja de estilo, tales como:

a { color: white; } 
QLabel!visited { color: white; } 

pero esto no tiene ningún efecto. Lo único que parece funcionar está cambiando de QPalette la aplicación:

QPalette newPal(qApp->palette()); 
newPal.setColor(QPalette::Link, Qt::white); 
newPal.setColor(QPalette::LinkVisited, Qt::white); 
qApp->setPalette(newPal); 

Sin embargo, esto requiere que el color que se hardcoded. ¿Hay alguna forma en que pueda establecer el color de una hoja de estilo en su lugar?

EDIT:

he descubierto un problema adicional con la personalización de la paleta. Si solo quiero modificar la paleta de mi widget (sustituyendo widget por qApp en el ejemplo anterior), esto no funciona. No quiero afectar a todos los demás QLabels en la aplicación, así que ¿cómo limito los cambios de la paleta a este widget?

Respuesta

2

La respuesta corta es no. Recientemente tuve que hacer esto.

  1. QLabel!visited no funciona porque Qt no rastrea si QLabel fue visitado o no.
  2. QLabel { color: ... } no funciona para los enlaces. No puedo encontrar el motivo, pero todo lo que encontré es una sugerencia para usar QPallete en este caso.
+0

Creo que he llegado a las mismas conclusiones - ver mi otro comentario –

+4

QLabel(). SetText (' something') – Asi

5

He tenido poco éxito al configurar explícitamente el QPalette - funciona si lo configura para toda la aplicación, pero no si lo configura en el widget. Al final, sin embargo, lo más fácil para lo que tenía que hacer era usar un QTextBrowser en su lugar que admite un subset de HTML. Entonces podría anular el color de los enlaces usando una hoja de estilo CSS normal:

QTextBrowser browser; 
// IMPORTANT! - set the stylesheet before the content 
browser->document()->setDefaultStyleSheet("a {color: white; }"); 
browser->setText(html); 
5

Una forma es añadir style="color: whatever" o una clase al interior <span> del enlace. Aún no he descubierto cómo aplicar esto a toda la aplicación, pero es un buen comienzo.

+0

Esta es la única respuesta real. Tenga en cuenta que el diseñador de Qt parece colorear explícitamente cada enlace, lo que anula cualquier valor predeterminado en su hoja de estilo global. –

Cuestiones relacionadas