QT:在中央小部件中添加上下文菜单的最佳方法?
-
01-10-2019 - |
题
我不明白为什么在书中 与Python和QT快速GUI编程, ,通过调用上下文菜单添加到中央小部件 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
, , 多于)!我完全失去了为什么这本书使用上面的第一片片段而不是最后一个……帮助! :)
解决方案
在qmainwindow上使用self.addaction()允许所有qmainwindow childs(docks,statusbar,statusbar,工具栏,menubar,...)使用这些动作,而不仅仅是中央小部件。
但是获得细粒度上下文菜单控制的最佳方法是使用customContextMenureQuested Signal(http://www.riverbankcomputing.co.uk/static/docs/pyqt4/html/qwidget.html#customcontextmenurequested).
不隶属于 StackOverflow