Transparenz von Widgets in QGraphicsView

Alles rund um die Programmierung mit Qt
Antworten
sting73
Beiträge: 7
Registriert: 9. April 2009 22:05

Transparenz von Widgets in QGraphicsView

Beitrag 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
Dateianhänge
Hier fehlt leider die Transparenz :-(
Hier fehlt leider die Transparenz :-(
view_demo.JPG (6.43 KiB) 1334 mal betrachtet
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
sting73
Beiträge: 7
Registriert: 9. April 2009 22:05

Beitrag 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
sting73
Beiträge: 7
Registriert: 9. April 2009 22:05

Beitrag von sting73 »

Im Konstruktor des Widgets:

this->setAttribute(Qt::WA_TranslucentBackground);

..dann funktioniert es :-)

Danke und Gruß,

Denis
Antworten