ich bin neu hier und hoffe, hier Hilfe für mein Problem zu bekommen. Mein Problem ist sicher für einen Qt-Profi ein Klacks, aber normalerweise programmiere ich unter MFC und habe keinen blassen Schimmer von Qt.
Mein Problem liegt darin, dass ich ein QMainWindow habe und ein QDockingWidget dazu kommt (mit addDockWidget()) und wenn ich dann den Splitter ziehe, um das Docking Widget zu vergrößern, dann wird für jeden Move der Inhalt der Fenster neu gezeichnet. Das wiederum resultiert in einer krassen Verzögerung, die Bewegung verkommt zum Kaugummi-Stil und ist alles andere als flüssig. Ich habe in mehreren Boards nachgelesen, dass der Slider im QMainWindow nicht von QSplitter abgeleitet wurde, daher kann man den NonOpaqueMode (also den Mode, dass nicht immer der gesamte Widget-Inhalt neugezeichnet wird, wenn vergrößert oder verkleinert) nicht setzen. Dies war jedoch in Qt3 möglich, wurde aber irgendwie entfernt, da es Probleme machte. Ich brauche aber unbedingt diesen NonOpaqueMode und muss ihn nun nachprogrammieren.
Meine Idee war es, einen eventFilter für das mainwindow zu installieren, der den MousePress event abfängt, einen Flag setzt, der das Neuzeichnen der docking windows solange verhindert, bis das Flag nicht mehr gesetzt ist. Nach Loslassen der Maustaste wird das Flag entfernt und nochmal eine MouseMove event an die docking widgets geschickt.
Nun habe ich gelesen, dass man für jedes child widget den event filter installieren muss (installEventFilter()). Nun habe ich mal vor und nach addDockWidget() alle child widgets vom main window abgefragt, die von der Klasse QWidget sind. Das sind 48 vor und 57 nach addDockWidget(). Nun frage ich mich, ob es wirklich Sinn macht, allen diesen Widgets den event filter zu setzen (was passiert, wenn ich diesen doppelt setze?).
Macht meine Taktik generell Sinn? Oder empfiehlt Ihr mir eine andere Methode. Evtl. gibt es ja schon fertige Lösungen (wäre mir das Einfachste
Jede Hilfe ist Willkommen, damit ich einen Einstieg bekommen, Danke!