Seite 1 von 2
Tabwechsel ändern ....
Verfasst: 28. April 2008 23:31
von QtNoob2008
Nabend,
habe mal wieder nen kleines Problem. Ich verwende ein ganz normales QTabWidget in meiner Anwendung und möchte nun dass die Tabs nicht sofort durch ein "pressed()"-Signal gewechselt werden, sondern eher wie es bei einem einfachen QPushButton der Fall ist durch z.B. ein "clicked()"-Signal. Wie kann ich dies am leichtesten umsetzen und mein QTabWidget anpassen? Bin euch für jeden Tipp dankbar!
Gruß QtNoob2008
Verfasst: 29. April 2008 00:02
von C167
Du koenntest eine Klasse schreiben, die von QTabWidget ableitet. Einfacher waere wohl aber, dass du einen EventFilter nutzen. Wenn du den in einer deiner Klassen implementierst, kannst du ihn per
nutzen und alle events abfangen
Verfasst: 29. April 2008 09:03
von upsala
Warum will man das? Was soll das für einen Nutzen haben?
Verfasst: 29. April 2008 09:42
von QtNoob2008
Guten Morgen,
vielen Dank, nach dem
werde ich mir gleich mal gucken!
@upsala:
... weil z.B. meine Buttons auf ein "clicked()" ihre Aktionen ausführen und wenn ich den Button drücke und im gedrückten Zustand (also pressed() )den Button verlasse, das clicked Signal nicht gesendet wird und keine Aktion erfolgt. Dieses Verhalten möchte ich auch bei den Tabs haben, sprich bei einem "drag out" soll das Tab nicht gewechselt werden, erst wenn der Benutzer wieder die Maustaste über dem gleichen "Reiter" losläßt, soll der Wechsel erfolgen.
Verfasst: 29. April 2008 09:48
von QtNoob2008
... ähm den
gibt es wohl nicht.
du meinst wohl den
???
Sowas hab ich schon einmal für Buttons ausprobiert...
Frage mich aber ob ich den Filter dann aber dann dem TabWidget oder der TabBar übergeben muss. Zudem habe ich keine Ahnung was ich da dann genau überschreiben soll...

Verfasst: 29. April 2008 10:52
von PeterLustig
Ja er meint installEventFilter. Und wieso weißt du nicht wie du den dann ins TabWidget installiest? Die Funktion ist in QObject deklariert und QTabWidget leitet von QObject ab.
Verfasst: 29. April 2008 11:46
von QtNoob2008
...den Filter installieren ist ja nicht das Problem. Hab ich schon einmal für 2 Buttons testweise erstellt. Mein Problem ist, ich weiß nicht was ich in dem Filter überschreiben muss um mein Verhalten hinzubekommen...
Muss ich das
überschreiben ??? Bin mir da nicht sicher, weil das QTabWidget ja noch den "Anzeigebereich" enthält ...

Verfasst: 29. April 2008 12:16
von myme
Mein erster Gedanke wäre, ein Event Filter auf die QTabBar des QTabWidgets zu setzen, um die MousePress Events unter die Lupe zu nehmen. Das MouseRelease Event müsste weiter durchgehen, damit die QTabBar ein "currentChanged" Signal an das QTabWidget sendet, wenn der Mausknopf losgelassen wird.
Verfasst: 29. April 2008 12:17
von upsala
1. Finde ich, daß dich um völlig falsche Probleme kümmerst.
2. Müßt dir der
Event-Filter eigentlich schon bekannt sein
Verfasst: 29. April 2008 12:19
von C167
PeterLustig hat geschrieben:Ja er meint installEventFilter. Und wieso weißt du nicht wie du den dann ins TabWidget installiest? Die Funktion ist in QObject deklariert und QTabWidget leitet von QObject ab.
Exakt, das passiert, wenn nebendran einer steht und einem was vom Java'ischen ActionListener erzaehlt... sorry dafuer.
Ich wuerde dir empfehlen, einfach mal per qDebug() die einzelnen Events auszugeben, wenn sie kommen. Dadurch kannst du herausfinden, welches Event von welcher Aktion ausgeloesst wird.
Verfasst: 29. April 2008 12:46
von QtNoob2008
kein Problem

!!!
Also habe gerade schon ein wenig ausprobiert. Der erstellte Eventfilter für die Buttons funktioniert auch für das TabWidget, da aber nur für den Anzeigebereich. Hab danach den Eventfilter einer einfachen TabBar zugewiesen und 2 Tabs mit
hinzugefügt.
Der Filter funktioniert anscheinend auch, aber leider für den gesamten Anzeigebereich der TabBar, nicht seperat für die einzelnen "Reiter"...

Verfasst: 29. April 2008 12:50
von PeterLustig
Da musst du auch selbst überprüfen ob an der gegebenen Position ein Tab ist. Tabbar bietet dafür Funktionen.
Verfasst: 29. April 2008 13:08
von QtNoob2008
@myme:
ja genau das habe ich ausprobiert. Der Filter funktioniert dort wie bei den Buttons oder beim TabWidget!
@upsala:
1. Finde ich, daß dich um völlig falsche Probleme kümmerst.
2. Müßt dir der Event-Filter eigentlich schon bekannt sein
Wieso falsche Probleme, was meinst du genau? Der Event-Filter ist mir bekannt...
@Peter ich glaub das nützt nicht viel, weil der Filter ja auf die einzelnen Reiter wirken soll..... So hat die TabBar den Filter und verwendet ihn.
Verfasst: 29. April 2008 13:10
von PeterLustig
Und es gibt keine "einzelnen Buttons". Es gibt nur die Tabbar, und auf diesen wirkst du den Filter. Dort überprüfst du ob die Maus über einem der Buttons geklickt wurde (Tabbar bietet eine Funktion dafür) und handelst je nach dem.
Verfasst: 29. April 2008 13:21
von QtNoob2008
ahh ok, stimmt ! Danke !!!
D.h. im Endeffekt muss meinen Eventfilter anpassen und dort die Koordinatenauswertung für die einzelnen Tabs durchführen.
Im Moment macht mein Eventfilter eine Auswertung ob in den Koordinaten des Widgets geklickt wurde "MouseButtonPress" und ob beim "MouseButtonRelease" der Cursor noch Widget Bereich ist.