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

C++ Qt:将信号连接到具有更多参数的插槽,c++,qt,signals,C++,Qt,Signals,我想将按钮的信号clicked()连接到不同对象的插槽 目前,我将信号连接到helper方法,并从那里调用所需的插槽: connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked())); void buttonClicked() { // Helper method. I'd like to avoid it. someObject.desiredSlot(localFunc1(), localFunc2()); } 但也

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

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

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

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

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

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

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

请看一下。

这就是您要做的:

单击的信号应连接到“desiredSlot”,该插槽接受localFunc1和2返回的两个参数


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

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

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

但是,您不能在默认参数中访问成员。

这应该适用于qt 5中的新信号/插槽机制:

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

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

我刚刚在代码示例中跳过了这一步。现在我已经把它添加到帖子中了@Deyyyyff正确地理解了我。是的,你正确地理解了我。我想知道是否有任何包装器可以帮助我避免手动创建这样的帮助器方法。