Wie kann man es umgehen, das der Inhalt eines Fensters automatisch gelöscht wird?
-
Manchmal ist es sinnvoll, das der Bildinhalt gelöscht und neu aufgebaut werden muss. Solange nur zb drei Striche in dem Bild sind, mag das noch sinnig sein. Bei 10000 Linien oder Objekten ist das absolut nicht tragbar. Dieses Problem betrifft auf jeden Fall QPainter und OpenGL. Ich selbst habe schon einiges versucht, was halbwegs funktioniert hat, bis wieder irgendein Event zuschlägt. Bei sehr alten Versionen von Qt hat dies übrigens recht gut funktioniert. Objekte können leicht mit XOR Verknüpfung bewegt werden, ohne den Hintergrund zu zerstören. Bei OpenGL nicht ganz so einfach. Oder man legt den Bereich im Speicher ab, um ihn später wieder darzustellen. Alles andere macht aus Performancegründen einfach keinen echten Sinn.
Das funktioniert bedingt :
setAttribute(Qt::WA_NoSystemBackground,true); setAttribute(Qt::WA_OpaquePaintEvent,false);
Nur der Bringer ist es absolut nicht!
Bisher war ich mit Qt recht zufrieden, Qt creator 7 ist eine Katastrophe. Vergisst seine eigenen Themen, und selbst nach dem schließen eines Projektes wurde gl.h als nicht vorhanden beanstandet. Erstens hab ich die Datei da gefunden, wo sie immer ist und zweitens hatte das folgende Testprojekt nicht das geringste mit gl.h zu tun. Echt übel!!! -
Sehe zwar keine Relation zwischen deiner Frage und QtCreator aber was solls.
Zeichne in ein QImage und nimm das im paintEvent() - alles andere kann nicht gehen und Qt kann da auch nichts dagegen tun - wenn das OS zum Neuzeichnen auffordert muss nunmal neu gezeichnet werden.
-
@Christian-Ehrlicher , das eine hat mit dem anderen tatsächlich nichts zu tun. Hmmm, daran habe ich schon gedacht. Habe aber auf eine andere Antwort gehofft. Klar, heute sind Rechner relativ schnell. Das hin und wieder ganz neu dargestellt werden muss ist auch klar. Wirklich zufrieden bin ich damit leider nicht. Dir aber trotzdem Danke für die Antwort.
-
Puuh, hab es tatsächlich hin bekommen. Nach einigen Kopfständen bei der Größenänderung. Womit allerdings wohl auch das Problem mit dem Speichern eines Ergebnisses gelöst sein dürfte. Falls jemand den Post sieht, bin ich gerne bereit den source Code zu schicken. Aktuell wird nur ein Bild mit Hintergrund dunkelblau gezeigt, nach Datei->neu. Und man kann einfach Linien zeichnen. Performance hab ich so nicht getestet, fühlt sich aber gut an.
-
Hallo.
Wenn Du verhindern möchtest, das (unter Windows) das Fenster neu gezeichnet wird, könntest Du zB. die entsprechende Systemmessage "abfangen". Das wäre dann über einen Callback zu realisieren, der sich in die Messagequeue einfügt und bei Bedarf reagiert. -
@SuperTuxer , danke mal für den Hinweis. Allerdings ist Windows seit über 20 Jahren ein absolutes no go für mich. Oder, um es anders zu sagen, wenn Microsoft pleite geht (was wohl leider kaum passieren wird), mache ich den Sekt auf. Ich hab tatsächlich mal unter Windows c++ programmiert. Das war in den 90gern und mit der IDE und den Tools von Borland. Nachdem meine Anwendung dann, wegen eines angeblichen Fehlers, beendet wurde, habe ich etliche Tests gemacht. Mit verschiedenen Versionen von WINDOWS. Der Fehler trat nur auf, wenn man die Maus sehr schnell bewegte, und auch noch sporadisch. Mit den vorhandenen Möglichkeiten bin ich bei jedem Versuch im Kernel gelandet, wo der Fehler tatsächlich auftrat. Spätere Test unter Linux haben diesen Fehler nicht erzeugt. Seit dem ist Microsoft für mich gestorben. Aber ok, das ist jetzt kein mimimi und auch keine neue Frage. Lediglich Info weshalb ich mit Windows nichts zu tun haben will.