Problem mit QGraphicsView und einem QWidget + StyleSheet

Alles rund um die Programmierung mit Qt
Antworten
Herras
Beiträge: 10
Registriert: 31. März 2010 21:10

Problem mit QGraphicsView und einem QWidget + StyleSheet

Beitrag von Herras »

Hallo!

Ich habe ein Problem mit einem QGraphicsView unter Windows XP. Unter Windows 7 hingegen funktioniert es wie erwartet.

Und zwar scheint bei meinem QGraphicsView nach dem zeichnen das dahinterliegende Fenster durch. Egal ob das durchscheinende Fenster zu der Anwendung gehört oder zu einem anderem Programm. Was komisch ist, es beschränkt sich auf nur einen kleinen Teil im linken mittleren Bereich. Ich habe ein Bild von dem Problem angehängt, um besser zu verstehen was ich meine.

Genau so sieht meine Zeichenroutine aus:

Code: Alles auswählen

void MyWidget::drawScene()
{
   scene->clear();

   drawItems(); // QGraphicsItems erzeugen und mit setPos(...) in die scene setzen

   QRectF sceneBoundingRect = scene->itemsBoundingRect();
   sceneBoundingRect.adjust(-20.0, -20.0, 20.0, 20.0);
   ui.GraphicsView->setSceneRect(sceneBoundingRect);
}
Ich habe noch ein zweites, aber kleineres Problem. Gibt es die Möglichkeit, für ein QWidget ein Stylesheet so zu setzen, dass sich das StyleSheet nur auf dieses eine QWidget bezieht und nicht noch zusätzliche auf die ChildWidgets? Und ohne dass dafür ein eigenes Widget erzeutg werden muss? Mache ich QWidget {background-color: green} so sind sämtliche Widgets innerhalb dieses QWidgets betroffen...

Danke und Grüße
Herras
Dateianhänge
Rechts mit weißem Hintergrund ist das QGraphicsView, ein Fenster im Hintergrund "drückt" durch
Rechts mit weißem Hintergrund ist das QGraphicsView, ein Fenster im Hintergrund "drückt" durch
hintergrundfehler.png (19.79 KiB) 1754 mal betrachtet
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du weißt, dass du eine scene nur EINMAL aufsetzt? Wenn du was ändern willst, machst du das indem einzelne Items hinzugefügt/entfernt/verschoben werden, und nicht über ein komplettes scene leeren und neu aufsetzen.
Für das Zeichenproblem wäre mehr Code hilfreich, schaut irgendwie nach nem tieferliegenden Fehler aus; WindowManager, GrafikTreiber/Karte, ...
Herras
Beiträge: 10
Registriert: 31. März 2010 21:10

Beitrag von Herras »

Hallo franzf!

Die Scene wird nur einmal erstellt. Da sich aber jedes mal die Scene komplett ändert, wird sie mit scene->clear() vor jedem neu zeichnen geleert (ob ich jetzt manuell über die Items iteriere oder clear() verwende sollte ja egal sein).
Es gibt also kein verschieben/hinzufügen von Items. Das wird doch eigentlich nur ein Performanceverlust sein, ansonsten aber keine weiteren Auswirkunge haben???

Dein letzter Satz hat mich auf eine Idee gebaracht... Ohne QGLWidget funktioniert es unter Windows XP reibungslos. Obwohl ich davor mit QGLFormat::hasOpenGL() abfrage, ob ich ein QGLWidget überhaupt setzen kann. Im QGLFormat gebe ich nur DoubleBuffer und SampleBuffer mit. Komisch...

Gruß Herras
Antworten