2016-03-31 2 views
2

Je veux brosser mon sous-widget avec QLinerGradient. J'ai créé l'interface utilisateur en utilisant QtDesigner.QPalette ne fonctionne pas sous QWidget

enter image description here

Mais je ne peux pas brosser ce widget en utilisant ce code. (Ui.colorBarWidget est QWidget normale a été créé par QtDesigner.)

QPalette palette; 
    QLinearGradient gradient(ui.colorBarWidget->rect().topLeft(),ui.colorBarWidget->rect().topRight()); 

    gradient.setColorAt(0, Qt::blue); 
    gradient.setColorAt(0.2, Qt::green); 
    gradient.setColorAt(0.4, Qt::red); 
    gradient.setColorAt(0.6, Qt::yellow); 
    gradient.setColorAt(1, Qt::cyan); 
    palette.setBrush(QPalette::Base, gradient); 

    ui.colorBarWidget->setPalette(palette); 

En outre, ce code fonctionne en stand alone QWidget application.This est sa sortie:

enter image description here

Mais je ne peux pas faire même chose dans ma conception. Je peux le faire avec styleSheet

ui.colorBarWidget->setStyleSheet("background-color: qlineargradient(x1:0 y1:0, x2:0 y2:1, stop:0 blue, stop:1 red)"); /* works */ 

mais pourquoi je ne peux pas faire cela avec QPalette.

Merci d'avance.

Répondre

0

J'ai trouvé la solution. Si vous utilisez la palette de réglage après:

ui.colorBarWidget->setAutoFillBackground(true); 

Cette propriété est définie par défaut sur false. Donc vous devriez l'activer alors tout va bien. Mais vous devriez aussi considérer la taille, la taille fixe mieux pour cela.

0

Je ne sais pas quel type de widget est ui.colorBarWidget, mais il semble que ce n'est pas un widget d'entrée, comme QLineEdit ou QComboBox. Par conséquent, vous devez utiliser un rôle QPalette::Window au lieu de QPalette::Base.

Dans la documentation de Qt, il y a une description qui suit pour le QPalette::Base role:

Utilisé principalement comme la couleur d'arrière-plan pour les widgets d'entrée de texte, mais peut être utilisé pour d'autres la peinture - comme l'arrière-plan combobox listes déroulantes et poignées de barre d'outils. Il est généralement blanc ou d'une autre couleur claire.

+0

J'ai essayé Base, Background, Window ... mais je n'arrive toujours pas à le faire. Aussi, ui.colorBarWidget est normal QWidget a été créé à partir de QtDesigner. – Wilmort