Qt中信号与槽函数参数不匹配的解决办法?

qq_30968345 2016-01-06 04:58:40
Qt中的信号和槽机制大家都很了解的吧,信号所带的参数类型和槽函数的参数类型要一一对应。如果信号不带参数,那么槽函数的参数也要为空,就像connect(thread, SIGNAL(started()), work, SLOT(first()));started()信号与first()槽函数的参数都为空。但是如果二者的参数类型不一样,该如何处理了?

我现在就遇到了这样一个问题:我有一个A类和一个B类,还有一个MainWindow类,在A类中有一个槽函数A1,不过这个A1函数有2个参数,其中一个参数是B的实例对象b,因此在调用A1函数时的写法是A1(x,b)。其中,在MainWindow中有一个PushButton按钮,在这个按钮的clicked槽函数里执行了启动线程thread.start(),我在构造函数中,将A类的实例对象a通过movetoThread(thread)这个方法移到了一个新开辟的线程里。现在在clicked槽函数要使线程在start后执行对象a的A1(x,b)函数,就得使用信号槽方法将connect(thread, SIGNAL(started()), a, SLOT(A1(X,B)));加到构造函数中,但是这样started()信号和槽函数A1(X,B)的参数就不匹配了。

这就是我目前想不到办法解决的问题。这个问题的描述我写的很详细,希望有能看懂的朋友教我如何处理这样的问题。
...全文
1086 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ch2065 2016-01-08
  • 打赏
  • 举报
回复 2
可以使用C++11新特性lambda表达式进行绑定,比如 connect(thread, &QThread::started, [this, a, &B, x](){ a->A1(x, B); }); 其中lambda表达式中,中括号里面的是捕获表达式,小括号是参数,大括号是匿名函数定义,当然你的Qt工程配置中要加入CONFIG+=c++11
henryldz2015 2016-01-07
  • 打赏
  • 举报
回复
2 要么增加一层c, 它记录a和b, c增加函数来转发start的信号 说的很清楚了
qq_30968345 2016-01-07
  • 打赏
  • 举报
回复
我在MainWindow类其中的一个按钮PushButton的clicked槽函数启动thread.start,而在这个函数中执行了b和a的方法函数来取值,b先执行,a再执行,这样就把已经赋值的b传给了A1,就能执行A1方法。所以说A1函数是需要带参数的。不然无法让取值后的b传给A1来运行A1的函数体。
fly_dragon_fly 2016-01-06
  • 打赏
  • 举报
回复
1 要么修改对象a, 在内部记录b, 同时还要修改A1参数 2 要么增加一层c, 它记录a和b, c增加函数来转发start的信号

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧