2016-07-13 1 views
0

j'ai un widget dans la fenêtre principale, le widget a les styles suivants:fond QWidget transparent

background-color:#ffeeeeee;width:100%;height:100%; 

Il est mis en place à un widget mise en page et contrôle la taille automatique pour remplir la géométrie du widget, mais l'arrière-plan du widget est toujours transparent. Que puis-je faire pour le rendre opaque?

est d'utiliser Qt5.6 sur Redhat Linux 7.2

REMARQUE: La #ffeeeeee de syntaxe est spécifique à Qt, où le premier noeud est l'alpha, puis octets rouge, vert et bleu.

+0

Avez-vous essayé 'setAutoFillBackground (true)'? Je pense que c'est faux par défaut donc l'arrière-plan ne sera pas dessiné avant que le membre 'paintEvent' ne soit invoqué. –

+0

Oui, pas de différence, j'ai aussi ajouté un appel à mettre à jour mais c'est toujours transparent. – SPlatten

+0

Est-il opaque lorsque vous écrivez 'background-color: grey;'? – ilotXXI

Répondre

1

Avec l'actuelle couleur de fond et mettre à tout de ce qui suit:

background-color:white;width:100%;height:100%; 

ou

background-color:#ffffff;width:100%;height:100%; 

ou mon original:

background-color:#ffeeeeee;width:100%;height:100%; 

La propriété, autoFillBackground est définie sur false et l'arrière-plan du widget est transparent à l'exécution.

Cependant enlever tous les styles de couleur de fond et en laissant le style comme juste:

width:100%;height:100% 

La propriété, autoFillBackground est définie sur true et le widget est opaque. Pour autant que je puisse voir, il n'y a pas d'erreur dans les styles, je crois que cela peut être une erreur dans Qt.

+0

Voulez-vous dire qu'un appel de 'setAutoFillBackground (true)' échoue si la propriété 'background-color' est définie dans le style? –

+0

Si j'ajoute un style pour la couleur d'arrière-plan, la valeur du noeud autofillbackground est automatiquement définie sur false. – SPlatten

+0

Désolé mais ce n'est pas ce que je demande. Ma question est ... si je mets le style à celui qui définit la propriété 'background-color', est-ce qu'un appel ultérieur à' setAutoFillBackground (true) 'ne définit pas' autoFillBackground' sur true? C'était la suggestion dans mon commentaire original. –

0

Vous avez trop de caractères dans votre couleur. Changement:

background-color: #ffeeeeee; 

à:

background-color: #eeeeee; 

Si vous souhaitez utiliser la transparence, vous devrez être explicite:

background-color: rgba(...); 
+0

Non, mon post est correct ... en Qt la couleur des feuilles de style est formatée comme suit, le premier nœud est l'alpha, puis le rouge, le vert, le bleu. Dans mon exemple, #ff est complètement opaque. – SPlatten

+0

@SPlatten Fixe. Essayez mon édition. –

+0

désolé, cela n'aide pas. – SPlatten

0

Avez-vous essayé d'utiliser QWidget :: setWindowOpacity (1) où 1 = opaque et 0 = transperant.

Essayez également QGraphicsOpacityEffect. Le code suivant permet de définir l'opacité de 50% pour un bouton, mais il peut également être étendu à un widget.

ui->setupUi(this); 
QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(ui->pushButton); 
effect->setOpacity(0.5); 
ui->pushButton->setGraphicsEffect(effect); 
+0

Oui, et le paramètre dans XML était 1. – SPlatten