Seite 1 von 1

Transparenz von Widgets in QGraphicsView

Verfasst: 25. April 2009 11:20
von sting73
Hallo,

ich möchte ein Widget in einem QGraphicsView benutzen. Leider wird das Widget welches normalerweise einen transparenten Hintergrund hat mit einem grauen Hintergrund gezeichnet.

Ich habe hier mal exemplarisch ein kleines Beispiel mit einem QDial-Widget vorbereitet:

#include <QtGui>

Code: Alles auswählen

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;
    scene.setBackgroundBrush(Qt::black);

    QDial * pDial = new QDial(NULL);
    QGraphicsProxyWidget * pWidget =  scene.addWidget(pDial);
    QGraphicsView view(&scene);

    view.show();
    return a.exec();
} 
Gibt es eine Möglichkeit das Widget auch im GraphicsView transparent zu rendern?

Vielen Dank!

Gruß,

Denis

Verfasst: 25. April 2009 11:34
von franzf
Über die Palette zum Bsp

Code: Alles auswählen

    QPalette p = pWidget->palette();
    QColor bc = p.color(QPalette::Background);
    bc.setAlpha(0);
    p.setColor(QPalette::Background, bc);
    pWidget->setPalette(p);
Schaut aber mit dem Schwarz echt nicht gut aus :D Solltest dir überlegen, ob du nicht die ganze Palette anpasst, dass auch Text noch lesbar ist.

Verfasst: 25. April 2009 11:50
von sting73
Hallo,

das ist leider ncih ganz das was ich benötige. Das mit dem schwarzen Hintergrund und dem QDial war nur als allgemeines Beispiel gedacht um das Problem zu verdeutlichen. Ich habe ein recht komplexes Widget mit Farbverläufen und runden Ecken. Benutze ich das Widget in einem "normalen" Fenster werden die nicht gezeichneten Bereich transparent dargestellt. Benutze ich das gleiche Widget im GraphicsView werden die Bereiche die vorher tranzparent waren nicht mehr tranzparent gezeichnet. Wenn ich eine feste Farbe als Hintergrund hätte, könnte ich diese ja als Hintergrund für das Widget benutzen. Dies is aber in meinem Fall nicht möglich, da ich das Widget später über einem Farbverlauf bzw. anderen Elementen transformieren (skalieren, drehen) möchte.

Gruß,

Denis

Verfasst: 28. April 2009 12:11
von sting73
Im Konstruktor des Widgets:

this->setAttribute(Qt::WA_TranslucentBackground);

..dann funktioniert es :-)

Danke und Gruß,

Denis