Qt: Лучший способ добавить контекстное меню в центральный виджет?
-
01-10-2019 - |
Вопрос
Я не понимаю, почему в книге Быстрое программирование GUI с Python и Qt, Контекстное меню добавляется в центральный виджет, позвонив addActions()
на главном окне (self
), как так (стр. 180):
self.addActions(self.imageLabel,
(editInvertAction, …))
куда self
это QMainWindow
, а также imageLabel
это QLabel
установить как центральный виджет с
# Added actions will be put in a context menu:
self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setCentralWidget(self.imageLabel)
Теперь, почему главное окно будет связано каким-то образом (через self.addActions()
) в контекстное меню центрального виджета? Не достаточно, чтобы позвонить addActions()
прямо на центральном виджете? На самом деле, следующее создает контекстное меню:
self.imageLabel.addActions((editInvertAction, …))
Почему не пример книги контекстного меню так? Разве это не эквивалентно более вовлеченному self.addActions(…)
форма?
PS.: Я даже вижу, что Документация для QMainWindow.Addactions () даже не упоминается о любом первом аргументе (self.imageLabel
, над)! Я полностью потерян относительно того, почему в книге используется первый фрагмент выше, а не последняя ... Помогите! :)
Решение
Использование Self.Addaction () на qmainwindow Разрешить все qMainwindow Childs (доки, statusbar, панель инструментов, Menubar, ...), чтобы использовать тезисы действия, не только центральный виджет.
Но лучший способ получить тонкозернированный контекстный меню управления состоит в том, чтобы использовать сигнал CustomContextMENURERUREVED (http://www.riverbankcomputing.co.uk/static/docs/pyqt4/html/qwidget.html#customcontextmenurewquest).