将函数与 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);
与 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);