Tabwechsel ändern ....
-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
Tabwechsel ändern ....
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
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
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 pernutzen und alle events abfangen
Code: Alles auswählen
tabWidget->installEventListener ( this );-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
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.
vielen Dank, nach dem
Code: Alles auswählen
installEventListener()@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.
-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
... ä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...
Code: Alles auswählen
installEventListener()du meinst wohl den
Code: Alles auswählen
installEventFilter()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...
-
PeterLustig
- Beiträge: 386
- Registriert: 21. November 2007 20:07
-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
...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 ... 
Muss ich das
Code: Alles auswählen
QEvent::MouseButtonPress 1. Finde ich, daß dich um völlig falsche Probleme kümmerst.
2. Müßt dir der Event-Filter eigentlich schon bekannt sein
2. Müßt dir der Event-Filter eigentlich schon bekannt sein
Exakt, das passiert, wenn nebendran einer steht und einem was vom Java'ischen ActionListener erzaehlt... sorry dafuer.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.
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.
-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
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"...
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
Code: Alles auswählen
tabbar->addTab("Text1");
tabbar->addTab("Text2");Der Filter funktioniert anscheinend auch, aber leider für den gesamten Anzeigebereich der TabBar, nicht seperat für die einzelnen "Reiter"...
-
PeterLustig
- Beiträge: 386
- Registriert: 21. November 2007 20:07
-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
@myme:
ja genau das habe ich ausprobiert. Der Filter funktioniert dort wie bei den Buttons oder beim TabWidget!
@upsala:
@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.
ja genau das habe ich ausprobiert. Der Filter funktioniert dort wie bei den Buttons oder beim TabWidget!
@upsala:
Wieso falsche Probleme, was meinst du genau? Der Event-Filter ist mir bekannt...1. Finde ich, daß dich um völlig falsche Probleme kümmerst.
2. Müßt dir der Event-Filter eigentlich schon bekannt sein
@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.
-
PeterLustig
- Beiträge: 386
- Registriert: 21. November 2007 20:07
-
QtNoob2008
- Beiträge: 54
- Registriert: 10. April 2008 08:27
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.
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.