Qt:将信号连接到具有更多参数的插槽

时间:2011-08-13 09:56:06

标签: c++ qt signals

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

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

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

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

但也许有一种更简单明了的方法可以做到这一点?

4 个答案:

答案 0 :(得分:7)

这就是你想要做的:

点击的信号应该连接到“desiredSlot”,它接受localFunc1& amp;返回的两个参数。 2 ??

这是不可能的,因为您可以在QT文档中阅读。一个插槽可以占用比信号提供的更少的参数 - 但不是相反的方式! (文档说“此连接将报告运行时错误”)

答案 1 :(得分:3)

这应该与qt 5中的新信号/插槽机制一起使用:

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

您需要根据需要调整lambda捕获。

答案 2 :(得分:1)

在某些情况下,默认参数可能有所帮助,例如将desiredSlot声明为:

desiredSlot(int a=0, int b=0)

但您无法访问默认参数中的成员。

答案 3 :(得分:0)

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

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

查看QT documentation