2017-09-07 3 views
1

Ce que j'essaie de faire est d'appliquer CSS personnalisé à un widget personnalisé dérivant de QLabel mais je n'ai pas de chance.La feuille de style CSS n'est pas appliquée à QWidget personnalisé

J'ai la classe personnalisée définie comme:

class CustomLabel : public QLabel { 

} 

Je n'ai pas réimplémenté la fonction paintEvent que je pensais que, étant donné que le QLabel standard prend en charge les feuilles de style CSS, je voudrais juste besoin de se référer à cette nouveau widget en CSS, par exemple:

CustomLabel { 
    background-color: #111111; 
    font-size: 18px; 
    font-weight: bold; 
} 

Malheureusement, à l'exécution, aucun style est appliqué le CustomLabel et le style par défaut QLabel est appliqué.

Quelqu'un peut-il suggérer pourquoi mes règles CSS sont ignorées pour CustomLabel?

étapes pour Recréez

  1. Créer un projet Widgets Qt en utilisant Qt Creator
  2. Ajouter une classe personnalisée dérivée de QLabel et appellent CustomLabel
  3. Ajouter un QLabel sur un formulaire en utilisant le concepteur
  4. Promouvoir l'étiquette en CustomLabel classe
  5. Appliquer la feuille de style en utilisant le code suivant dans main.cpp:

    a.setStyleSheet("CustomLabel {font-weight: bold;}"); 
    
  6. Exécutez le programme et notez comment CustomLabel n'est pas décorée dans des conformément au style CSS.

+0

Si vous avez CustomLabel a un espace de noms, vous devez ajouter cet espace de noms à votre CSS.Reportez-vous à cette question: https://stackoverflow.com/questions/26206492/qt-stylesheet-in-derived-class-in-c-namespace-selector –

Répondre

0

Ok, donc j'ai réussi à trouver une « solution » plutôt que d'une réponse correcte: utilisez le paramètre accessibleName.

Ainsi, dans Qt Creator, attribuer une valeur telle que CustomLabel au champ accessibleName du QLabel et dans le fichier CSS, ajoutez ce qui suit:

QLabel[accessibleName="CustomLabel"] { 
    font-size: 11px; 
} 
+0

accessibleName est une propriété de QWidget. Cela peut être changé. http://doc.qt.io/qt-5/qwidget.html#accessibleName-prop –

1

Vous devez utiliser la Q_OBJECT macro dans votre CustomLabel définition, autrement CustomLabel on ne sait pas au système de type Qt:

class CustomLabel : public QLabel { 
    Q_OBJECT 
} 

MCVE

CustomLabel.h:

#include "QLabel" 
class CustomLabel : public QLabel { 
    Q_OBJECT 
}; 

main.cpp:

#include "QApplication" 
#include "CustomLabel.h" 
int main(int argc, char * argv[]) 
{ 
    QApplication a(argc, argv); 
    a.setStyleSheet("CustomLabel {font-weight: bold; background-color: red;}"); 

    CustomLabel label; 
    label.setText ("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"); 
    label.show(); 

    a.exec(); 
} 
+0

Malheureusement, j'ai déjà essayé et cela n'a fait aucune différence. – weblar83

+0

J'ai ajouté un [mcve]. Cela fonctionne pour moi en utilisant Qt 5.9. – m7913d

+0

Hmm, intéressant - J'utilise 5.9.1 et ça ne marche pas pour moi. J'ai fait un 'clean', exécutez' qmake' et 'build' – weblar83

0

paramètres Try Qt::WA_StyledBackground attribut pour votre étiquette personnalisée.