Qt: bester Weg, um ein Kontextmenü mit dem zentralen Widget hinzufügen?
-
01-10-2019 - |
Frage
Ich verstehe nicht, warum in dem Buch Rapid-GUI-Programmierung mit Python und Qt , ein Kontextmenü zu einem zentralen Widget hinzugefügt von addActions()
Aufruf im Hauptfenster ( . self
), wie so (S. 180):
self.addActions(self.imageLabel,
(editInvertAction, …))
wo self
ein QMainWindow
ist, und imageLabel
ist ein QLabel
Satz als zentrales Widget mit
# Added actions will be put in a context menu:
self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setCentralWidget(self.imageLabel)
Nun, warum sollte das Hauptfenster in irgendeiner Weise in Verbindung gebracht werden (durch self.addActions()
) in das Kontextmenü des zentralen Widget? Ist es nicht genug addActions()
direkt auf das zentrale Widget anrufen? In der Tat führt die folgenden ein Kontextmenü erstellen:
self.imageLabel.addActions((editInvertAction, …))
Warum funktioniert das Buch Beispiel der Kontext auf diese Weise Menü? das nicht gleichbedeutend mit der mehr beteiligt self.addActions(…)
Form ist?
PS : Ich sehe auch, dass die Dokumentation für QMainWindow .addActions () erwähnt nicht einmal jedes erstes Argument (self.imageLabel
, oben)! Ich bin völlig verloren, warum das Buch verwendet den ersten Schnipsel oben anstatt die letzten ... Hilfe! :)
Lösung
Mit self.addAction () auf QMainWindow erlauben alle QMainWindow Childs (Docks, StatusBar, Symbol- MenuBar, ...) Thesen Aktionen zu verwenden, nicht nur das zentrale Widget.
Aber der beste Weg, um eine feinkörniges Kontextmenü Kontrolle zu bekommen, ist das customContextMenuRequested Signal zu verwenden ( http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html#customContextMenuRequested ).