我正在尝试减少我必须在我的上下文菜单中使用的信号量。菜单由切换程序操作模式的操作组成,因此由插槽执行的操作非常简单。引用QMenu::trigged上的文档
Normally, you connect each menu action's triggered() signal to its own custom slot, but sometimes you will want to connect several actions to a single slot, for example, when you have a group of closely related actions, such as "left justify", "center", "right justify".
但是,我不知道如何实现这一点,文档也没有进一步详细说明。
假设我在菜单actionMenu
中有操作actionOpMode1
和{setOpMode
。我想用一个参数调用setOpMode
,该参数与触发的操作有某种关系。我尝试了各种不同的排列方式:
QObject.connect(self.actionMenu, SIGNAL('triggered(QAction)'), self.setOpMode)
但我甚至没有让它调用setOpMode,这意味着actionMenu从来没有“感觉被触发”,可以这么说。在
在this SO question中,建议使用lamdba来完成,但是:
^{pr2}$给出"<lambda> () takes exactly 1 argument (0 given)"
。我不能说我真的理解这是如何工作的,所以当我从clicked()移动到trigged()时,我可能做错了什么。在
怎么做的?在
我使用这种方法:
使用Q对象发送方是一个解决方案,虽然不是最干净的。在
使用QSignalMapper将值与发出信号的对象明确关联。在
您可以使用QObject::sender()来确定哪个QAction发出了信号。在
所以你的插槽可能是这样的:
关于lambda中提到的另一个SO问题,它所做的是创建一个lambda,其中一个参数有一个默认值,所以要将其应用到您的示例中,您需要执行以下操作:
^{pr2}$然后有一个这样的成员函数:
就我个人而言,第一种方法看起来更干净、更易读。在
相关问题 更多 >
编程相关推荐