Qt: лучший способ добавить контекстное меню в центральный виджет? - PullRequest
1 голос
/ 27 августа 2010

Я не понимаю, почему в книге Быстрое программирование с помощью 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, выше)!Я совершенно не понимаю, почему в книге используется первый фрагмент выше, а не последний ... Помогите!:)

1 Ответ

1 голос
/ 30 августа 2010

Использование self.addAction () в QMainWindow позволяет всем дочерним элементам QMainWindow (Docks, StatusBar, ToolBar, MenuBar, ...) использовать эти действия, а не только центральный виджет.

Но лучший способполучить детальное контекстное меню элемента управления - использовать сигнал customContextMenuRequested (http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html#customContextMenuRequested).

...