graythornWW hat geschrieben:
Was haben sich die Qt-Entwickler dabei gedacht?
Qt4 hat eine recht aufwändige Grafik Engine, die wohl erforderlich war um die üblichen Desktop Effekte wie z.B. Semi-Transparenz zu ermöglichen. Ob es möglich gewesen wäre den XOR-Modus für Situationen zu retten, in denen über Qt::WA_PaintOutsidePaintEvent direkt gezeichnet werden kann, entzieht sich meiner Kenntnis. Aber da das eh nur auf einigen Plattformen möglich ist wäre das ohnehin keine Lösung.
Ich habe mit dem Chef Designer von Trolltech am ersten QT Tag ( bevor Qt4.0.0 raus war) über dieses Thema gesprochen. Seiner Einschätzung nach waren die Desktop Effekte wichtiger und er hoffte, daß der XOR Modus mit den bis dahin üblichen Entwicklungsschritten der Hardware überflüssig werden. Damals hätte ich ihm recht gegeben, aber tatsächlich haben wir ja einen neuen Markt mit leistungsschwächeren Geräten ( z.B Nettops ) bekommen.
Natürlich benötigst Du den Inhalt Deines Widgets in einem Pixmap Cache um die notwendigen Repaints schnell genug hinzubekommen. "Gehighlightete" Passagen würde ich dann darüber malen, oder sogar als eigene Widgets implementieren. Ein Gummiband ist unter Qt in der Regel ebenfalls ein eigenes Widget, wird also gar nicht in Dein Widget gezeichnet. Wenn Du Gummibänder mit gestrichelten Linien verwenden willst solltest Du zusätzlich Qt::WA_NoSystemBackground einschalten, da z.B. X11 komplette Repaints erzwingt, wenn ihm die Kontur des Gummibands zu kompliziert wird.
Vielleicht hilft Dir meine QwtPicker Klasse aus dem Qwt Projekt weiter. Damit kannst Du auf jedem beliebigen Widget mit ein paar Zeilen Code Selektionen unterstützt von Gummibändern durchführen.
Uwe