将函数与 Qt5 中的槽连接

Connecting a function with a slot in Qt5

与 Qt5 一样,有一个 new signal-slot syntax,我尝试使用它。

首先,我创建了一个 void return 类型的函数:

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);

但它 returned 错误:called to non-static member function without an object argument.

我也试过这个:

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

结果相同

那么,我该如何修补呢?或者,更有利的是,我如何将我的功能实现为一个插槽,并让 Qt 以 SIGNAL()SLOT()?

的旧时尚方式完成这项工作

旁注:我完全理解并测试了第一种情况(使用 void return 类型),但我想知道我是否必须处理第二种情况(这将是很多,实际上),什么是好的选择。

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

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