将函数与Qt5中的插槽连接



在Qt5中,有一种新的信号槽语法,我尝试使用它

首先,我创建了一个void返回类型函数:

void update()
{
cerr << "complete";
}

并连接到&QRadioButton::pressed

QRadioButton *button = new QRadioButton;
QObject::connect(button, &QRadioButton::pressed, update);

事情进展顺利。之后,我尝试插入一个参数:

void update(bool trigger)
{
if (!trigger) {return;}
cerr << "complete";
}

并尝试连接:

QRadioButton *button = new QRadioButton;
QObject::connect(button, &QRadioButton::toggled(bool), update);

但它返回了错误:called to non-static member function without an object argument

我也试过这个:

QObject::connect(button, &QRadioButton::toggled(bool), update(bool));

结果相同。

那么,我该如何修补呢?或者,更有利的是,我如何将我的功能实现为插槽,并让Qt以SIGNAL()SLOT()的旧方式完成工作?

旁注:我完全理解并测试了第一种情况(void返回类型(,但我想知道如果我必须处理第二种情况(实际上会很多(,什么是好的选择。

您不必设置签名,因为Qt将使用插槽的签名,所以您的初始代码应该可以工作:

QObject::connect(button, &QRadioButton::pressed, update);

最新更新