Qt:连接具有多个参数的信号到槽

5

我想将按钮的信号clicked()连接到不同对象的槽上。

目前我将信号连接到帮助方法,并从那里调用所需的槽:

connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));

void buttonClicked() { // Helper method. I'd like to avoid it.
    someObject.desiredSlot(localFunc1(), localFunc2());
}

也许有一种更简单明了的方法来实现这个?
4个回答

7

这是您想要做的吗:

点击的信号应连接到“desiredSlot”,该槽需要两个参数,这些参数由localFunc1和2返回?

很遗憾,这是不可能的,因为您可以在QT文档中阅读到。一个槽可以接受比信号提供的参数更少,但不能反过来使用!(文档说:“此连接将报告运行时错误”)


是的,你理解得很正确。我想知道是否有任何包装器可以帮助我避免手动创建这些辅助方法。 - OCyril

3

这应该可以在qt 5的新信号/槽机制中使用:

connect( button, &QPushButton::clicked, [&](){ someObject.desiredSlot( localFunc1(), localFunc2() ); } );

您需要根据自己的需求调整Lambda捕获。


1
在某些情况下,默认参数可能有所帮助,例如将desiredSlot声明为:
desiredSlot(int a=0, int b=0)

虽然可以使用默认参数,但无法访问其中的成员。


-1

这不是在QT中连接信号和槽的正确方式。你应该使用:

connect(button, SIGNAL(clicked()), receiver, SLOT(slotToBeCalled());

请查看QT文档


我刚在代码示例中跳过了这个。现在我已经将其添加到帖子中。@DeyyyFF 正确地理解了我。 - OCyril

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接