将函数与Qt5中的插槽连接
在Qt5中,有一个,我试着利用它 首先,我创建了一个将函数与Qt5中的插槽连接,qt,qt5,signals-slots,Qt,Qt5,Signals Slots,在Qt5中,有一个,我试着利用它 首先,我创建了一个void返回类型函数: void update() { cerr << "complete"; } 事情进展顺利。之后,我尝试插入一个参数: void update(bool trigger) { if (!trigger) {return;} cerr << "complete"; } 但它返回了错误:在没有对象参数的情况下调用非静态成员函数 我也试过
void
返回类型函数:
void update()
{
cerr << "complete";
}
事情进展顺利。之后,我尝试插入一个参数:
void update(bool trigger)
{
if (!trigger) {return;}
cerr << "complete";
}
但它返回了错误:在没有对象参数的情况下调用非静态成员函数
我也试过这个:
QObject::connect(button, &QRadioButton::toggled(bool), update(bool));
同样的结果
那么,我如何修补这个?或者,更有利的是,我如何将我的功能实现为一个插槽,并让Qt以旧式方式使用SIGNAL()
和slot()
旁注:我完全理解并测试了第一种情况(使用
void
返回类型),但我想知道,如果我必须处理第二种情况(实际上会很多),什么是一个好的选择。您不必设置签名,因为Qt将使用插槽的签名,所以您的初始代码应该可以工作:
QObject::connect(按钮和QRadioButton::按下,更新);
我知道这一点,但我想知道,无论出于何种原因,我必须处理案例2(使用参数),是否有解决问题的方法?(我编辑了这篇文章,并在旁注中提到了这一点)@SilverFox与案例1的相同联系适用于案例2,这是我的答案。你试过我对案例2的解决方案吗?是的,我试过了。但是,出于某种原因,如果我真的使用参数,比如void updateInc(int I){a+=I;}
(当然信号提供了int
),参数还会通过吗?@SilverFox您在评论中显示的代码不在帖子中,我认为问题的原因是另一个(什么是<代码> A/COD>?),所以我建议你创建一个新的帖子,提供一个是的,我在路上。谢谢你的支持。
QRadioButton *button = new QRadioButton;
QObject::connect(button, &QRadioButton::toggled(bool), update);
QObject::connect(button, &QRadioButton::toggled(bool), update(bool));