【发布时间】:2010-11-07 00:24:11
【问题描述】:
我正在尝试减少我必须在上下文菜单中使用的信号量。菜单由切换程序操作模式的动作组成,因此插槽进行的操作非常简单。引用 QMenu::triggered 上的文档,
通常,您将每个菜单操作的trigger() 信号连接到其自己的自定义槽,但有时您可能希望将多个操作连接到单个槽,例如,当您有一组密切相关的操作时,例如“左对齐”、“居中”、“右对齐”。
但是,我不知道如何做到这一点,文档也没有详细说明。
假设我在菜单actionMenu 中有操作actionOpMode1 和actionOpMode2,以及一个插槽setOpMode。我希望 setOpMode 使用与触发的操作相关的参数来调用。我在这个主题上尝试了各种排列:
QObject.connect(self.actionMenu, SIGNAL('triggered(QAction)'), self.setOpMode)
但我什至从来没有得到它调用 setOpMode,这表明 actionMenu 从来没有“感觉被触发”,可以这么说。
在this SO question中,建议可以用lamdbas完成,但是这样:
QObject.connect(self.actionOpMode1, SIGNAL('triggered()'), lambda t: self.setOpMode(t))
给出"<lambda> () takes exactly 1 argument (0 given)"。我不能说我真的理解这应该是如何工作的,所以在从 clicked() 移动到 trigger() 时我可能做错了。
它是怎么做的?
【问题讨论】: