2016-07-13 17 views
0

Ich habe ein Widget im Hauptfenster, das Widget die folgenden Stile hat:QWidget Hintergrund transparent

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

Es ist Set-up-Layout Widget und steuert die automatische Format die Geometrie des Widgets zu füllen, aber Der Hintergrund des Widgets ist immer transparent. Was kann ich tun, um es undurchsichtig zu machen?

Dies wird mit Qt5.6 läuft auf RedHat Linux 7.2

HINWEIS: Die Syntax #ffeeeeee ist auf Qt, spezifische, wo der erste Knoten die alpha ist, dann rot, grün und blau Bytes.

+0

Haben Sie 'setAutoFillBackground (true)' ausprobiert? Ich denke, es ist standardmäßig falsch, so dass der Hintergrund nicht gezeichnet wird, bevor das 'paintEvent'-Element aufgerufen wird. –

+0

Ja, kein Unterschied, ich habe auch einen Anruf zu aktualisieren, aber es ist immer noch transparent. – SPlatten

+0

Ist es undurchsichtig, wenn Sie 'background-color: grey;'? – ilotXXI

Antwort

1

Mit dem Hintergrund-Farbe vorhanden und auf jede des Folgenden:

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

oder

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

oder meine original:

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

Die Eigenschaft wird autoFillBackground auf false gesetzt und der Hintergrund des Widgets ist zur Laufzeit transparent.

jedoch jede Hintergrund-Farbe Stil entfernen und verlassen den Stil, wie gerade:

width:100%;height:100% 

Die Eigenschaft wird autoFillBackground auf true gesetzt und das Widget ist undurchsichtig.

Soweit ich sehen kann, gibt es keinen Fehler in den Stilen, ich glaube, dass dies ein Fehler in Qt sein kann.

+0

Wollen Sie sagen, dass ein Aufruf von 'setAutoFillBackground (true)' fehlschlägt, wenn die Eigenschaft 'background-color' im Stil gesetzt ist? –

+0

Wenn ich einen Stil für die Hintergrundfarbe hinzufüge, ändert sich automatisch der Wert des AutoFillbackground-Knotens auf false. – SPlatten

+0

Sorry, aber das ist nicht das, was ich frage. Meine Frage ist ... Wenn ich den Stil auf einen setze, der die 'background-color' -Eigenschaft setzt, setzt ein nachfolgender Aufruf von' setAutoFillBackground (true) '' 'autoFillBackground' nicht auf true? Das war der Vorschlag in meinem ursprünglichen Kommentar. –

0

Sie haben zu viele Zeichen in Ihrer Farbe. Wechsel:

background-color: #ffeeeeee; 

zu:

background-color: #eeeeee; 

Wenn Sie Transparenz verwenden möchten, werden Sie müssen explizit sein:

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

Nein, mein Beitrag ist korrekt ... in Qt ist die Farbe für Stylesheets wie folgt formatiert: Der erste Knoten ist der Alpha, dann Rot, Grün, Blau. In meinem Beispiel ist #ff voll opak. – SPlatten

+0

@SPlatten Korrigiert. Probiere meinen Schnitt. –

+0

Es tut mir leid, es hilft nicht. – SPlatten

0

Haben Sie versucht, mit QWidget :: setWindowOpacity (1), wo 1 = undurchsichtig und 0 = transperant.

Probieren Sie auch QGraphicsOpacityEffect.The ist Code zum Festlegen der 50 Prozent Deckkraft für eine Drucktaste, aber es kann auch zu einem Widget erweitert werden.

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

Ja, und die Einstellung im XML war 1. – SPlatten