Seite 1 von 1
QMenuBar und QMenu
Verfasst: Freitag 20. April 2012, 05:11
von Trubinial Guru
Hallo, ich habe zwei Fragen zu der QMenuBar, die ich durch meine Recherche und der Dokumentation nicht lösen konnte.
Zum einen hätte ich gerne ein QMenu, welches besonders hervorgehoben ist. Sprich dass entweder die Schrift anders formatiert ist oder der Eintrag ganz rechts in der Menüleiste erscheint, was am besten wäre. Ist sowas möglich? Sollte dies nicht möglich sein, wäre als letzte Möglichkeit auch ein Seperator denkbar, den ich aber leider durch den Designer nicht hinzufügen konnte.
Notfalls müsste ich mir vielleicht auch überlegen das Menü in eine Toolbar zu machen, wie hier beschrieben:
http://www.python-forum.de/viewtopic.ph ... ilit=qmenu
Des weiteren habe ich einen Menü-Eintag, der kein Unterverzeichnis(Action) hat.
Durch
Code: Alles auswählen
self.connect(self.menuExam_Mode, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
wollte ich diesen Menü-Eintrag direkt mit einem Slot verbinden. Anders als mit Untermenüs klappt das aber nicht? Warum? Wie macht man es richtig bei den QMenu's?
Liebe Grüße
Re: QMenuBar und QMenu
Verfasst: Freitag 20. April 2012, 10:59
von Hyperion
Trubinial Guru hat geschrieben:
Des weiteren habe ich einen Menü-Eintag, der kein Unterverzeichnis(Action) hat.
Kapiere ich nicht! Beschreibe mal besser, was Du hast! Ggf. auch durch einen Screenshot oder ein MocUp!
Das ist doch nicht Dein erstes Post zu Qt... da hat Dich doch schon sicherlich jemand auf die
"New style Signal and Slots" hingewiesen?
Code: Alles auswählen
# alt
self.connect(self.menuExam_Mode, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
# neu
self.menuExam_Mode.triggered.connect(close)
Re: QMenuBar und QMenu
Verfasst: Freitag 20. April 2012, 13:55
von deets
Mal eine Gegenfrage: welche Motivation hast du, etablierte UI-Paradigmen zu zerbrechen? Unter OsX zb wäre dein Ansatz unmöglich - da gibt's genau eine Art, wie das Menu dargestellt wird.
Für mich hört sich das an, als ob du toolbar & Menü Funktionalität versuchen willst. Warum?
Re: QMenuBar und QMenu
Verfasst: Montag 23. April 2012, 02:38
von Trubinial Guru
@deets: Du hast wohl recht, auch unter den neueren Ubuntu Versionen wäre das unmöglich. Auch die Toolbar&Menü Version ist eigentlich nicht gerade das schönste.
Mir fällt es gerade schwer einen geeigneten Platz für eine "Umschaltmöglichkeit" zu finden. Die Menüleiste schien da am besten geeignet, aber ich muss mir wohl etwas anderes überlegen.
Mit der Entscheidung nicht die Menüleiste zu nutzen wurde eigentlich die zweite Frage wegfallen, jedoch würde es mich trotzdem interessieren und vielleicht hilft es ja noch jemand anderem. Einen Screenshot kann man davon wohl nicht machen, aber ich werde es einfach sehr Bildhaft beschreiben.
Wenn man mit der Maus über die Einträge in der Menüleiste fährt erscheinen die verschiedenen Untereinträge des Menüpunktes. Z.B. wenn man über Datei fährt sieht man die Einträge
Speichern,
Speichern unter oder auch
Exportieren als. Wie ich diese Untereinträge mit einem Slot verbinde ist mir klar, aber wie kann ich den Eintrag
Datei der Menüleiste mit einem Slot verbinden, ohne dass ich Untereinträge habe?

Re: QMenuBar und QMenu
Verfasst: Montag 23. April 2012, 04:51
von deets
Ich sehe nicht, dass QMenu das dazu notwendige Signal generiert. Und wie gesagt - so funktionieren Menues nunmal nicht.
Ich vermute mal durch Ableitung von QMenu koenntest du das implementieren. Aber da musst du schon selbst ran.
Re: QMenuBar und QMenu
Verfasst: Montag 23. April 2012, 08:04
von lunar
@Trubinial Guru: "QMenuBar" ist in dieser Hinsicht nicht anders als "QMenu". Die hinzugefügten Einträge sind "QAction"-Objekte, die einerseits selbst ein "triggered"-Signal besitzen, andererseits auch "QMenuBar.triggered()" bei der Aktivierung auslösen.
Re: QMenuBar und QMenu
Verfasst: Montag 23. April 2012, 08:42
von deets
@lunar
Ich glaube er will schon ein Signal beim hovern/higlight eines Menues. Die gibt's aber laut Doku nur fuer die Actions darin, nicht schon den Menue-namen.
Re: QMenuBar und QMenu
Verfasst: Montag 23. April 2012, 11:24
von lunar
@deets: Jedes Untermenü, dass einer Menüleiste oder einem Menü hinzugefügt wird,
ist ein "QAction"-Objekt. Mit
QMenu.menuAction() kommt man an das zu einem Menü gehörende "QAction"-Objekt.
Re: QMenuBar und QMenu
Verfasst: Montag 23. April 2012, 11:34
von deets
@lunar
Und wie kann das gehen, wenn QMenu nicht von QAction erbt?
[edit]genauer lesen beantwortet diese frage, alles klar[/edit]
Re: QMenuBar und QMenu
Verfasst: Dienstag 24. April 2012, 08:14
von Trubinial Guru
@ deets: Ich will nur das Signal beim wirklichen drücken auf das QMenu.
@lunar: Wenn man mit menuAction() an das QAction Objekt kommt, müsste folgendes doch eigentlich funktionieren, oder?
Code: Alles auswählen
self.feedback = self.menuFeedback.menuAction()
self.feedback.triggered.connect(self.feedback_web)
Leider passiert aber nichts...
Re: QMenuBar und QMenu
Verfasst: Dienstag 24. April 2012, 10:06
von lunar
@Trubinial Guru: Unter OS X passiert bei mir auch nichts. Möglicherweise sind solche Ereignisse nicht Teil der Schnittstelle der nativen Menüleiste, so dass Qt nicht darauf zugreifen kann. Gleiches gilt für die Menüleiste unter Unity, auf welche die Anwendung gar keinen direkten Zugriff hat. Je nachdem, was Du vorhast, kannst Du Dir mit "QMenu.aboutToShow()" behelfen. Dieses Signal wird ausgelöst, wenn das Untermenü angezeigt werden soll, also unmittelbar nach dem Klick auf den betreffenden Eintrag in der Menüleiste.
Ich erlaube mir an dieser Stelle allerdings die nachdrückliche Frage nach Deinem Usecase. Warum musst Du auf den Klick auf einen Menüeintrag mit Untermenü reagieren?! Diese Aktion hat in jeder bedeuteten GUI-Umgebung genau eine semantische Bedeutung, nämlich das entsprechende Untermenü aufzuklappen. Du programmierst gegen das Rahmenwerk, nicht mit ihm, und brichst mit dem Resultat Deiner Bemühungen wahrscheinlich jede diesbezügliche UI-Richtlinie. Wenn Du überhaupt zum Ziel kommst, da mindestens OS X und Unity der Anwendung die Kontrolle über die Menüleiste fast vollständig entziehen. Unter OS X kann man nicht mal normale Einträge (also solche ohne Untermenü) in die Menüleiste einfügen.
Re: QMenuBar und QMenu
Verfasst: Dienstag 24. April 2012, 12:18
von Trubinial Guru
@ lunar: Vielen Dank für deine durchaus informative Erklärung! Für mich kommt das dann einfach nicht in frage, gerade durch das Verhalten unter Unity und OS X.
Ich hatte mich wohl auch ein wenig kompliziert ausgedrückt. Ich wollte nicht unbedingt auf den klick auf einen Menüeintrag mit Unterverzeichnis reagieren, sondern allgemein einen Menüeintrag in der Menüleiste. Mittlerweile wurde mir klar, dass der Designer immer nur Menüeinträge mit Unterverzeichnis erstellt... Nichtsdestotrotz kommt für mich das nicht mehr in Frage, da das Programm Plattform übergreifend ist.
Ich danke euch!