Wie erstelle ich ein semi-transparentes Rechteck in Qt?
Ich versuche zu zeichnen, semi-transparent Rechteck auf einem Bild zu handeln, als ein highlight. Leider nichts, was ich versuchen scheint in der Lage zu führen Sie die Transparenz-Effekt den ich haben will. Stattdessen bekomme ich nur, Unifarben gefüllten Rechtecke, keine Transparenz.
Hier ist, was ich gerade mache:
void PageView::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage img=...;
painter.drawImage(0, 0, img);
...
//draw a light blue, transparent rectangle to highlight
QRect rect=...;
painter.fillRect(rect, QColor(128, 128, 255, 128));
...
}
Leider, für mich, dies zieht eine solide Blaue Rechteck, anstatt das semi-transparente erwarte ich aufgrund der Angabe der QBrush
einen alpha-Wert.
Ich habe auch versucht die Zeichnung zu einem mittleren QImage
oder QPixMap
, um das Spiel mit painter.setCompositionMode(...)
. Kein Glück so weit.
Daher meine Frage: Wie kann ich überzeugen, Qt zeichnen ein semi-transparentes Rechteck zu meinem PageView
?
BEARBEITEN: Wenn es relevant ist, ich Baue diese unter Qt 4.8.1 auf Windows.
- Es gibt keine
QBrush(r, g, b, a)
Konstruktor in der Qt-Doku. Meinst duQColor
? - Das habe ich, ja. Mein Fehler.
- Voll
PageView::paintEvent
auf pastebin.com/Dj9dDd0c. Aber ich glaube nicht, dass es etwas Interessantes, was ich weggelassen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der code funktioniert bei mir mit einer leichten Modifikation, als es sich nicht kompilieren, da haben Sie es:
HINWEIS:
Der OP war die Malerei der semi-transparentes Rechteck in einer Schleife verursacht das gleiche zu lackierenden Fläche mehrere Male. Dies führt zu einem Additiven Effekt, die schließlich dazu führen, dass der Bereich um das gleiche wie eine einfarbige Füllung.
fillRect()
wie ich es hier mit einemQBrush
?QBrush(QColor(...))
. Denselben Effekt.