QT编程中信号与槽遇到的参数传递问题,如下

QT编程中信号与槽遇到的参数传递问题,如下,第1张

信号和槽如租肆果要传递参数就要确保参数类型和个数罩颂的一致 你这里槽函数里面有形参 但信号里面并没有传递过来 所以就连接不到一起

而且连接的时候只要写明参数的类型就可以了物型郑 你这里tcpsocket应该是对象名吧 这样就不对了 举个例子 connect(btn, SIGNAL( clicked(bool) ), this, SLOT( onClicked( bool ) ))

这个恐怕让你失望了,Qt的最大特色就是不受拘束的信号与槽机制,每种控件都定义了自身的信号,通过触发信号跳转到槽函数,你想用其他的方蔽租法去代替?

很难,对于某些特定的信号,就无法代替。

相对简单的,比如按钮、click()信号你可以通过定时器去检测按钮状态,根据状态的变化选择对应的函数,如果这样的话就复拆信杂的多了。况且定时器也是需要信号与槽的,定时器的旅并轮timeout()信号是无法检测的。也就是说这个机制是无法被替代的。

你可以把信号和槽的银码帆关系理解为函数调用的问题。当你的程序中某处发出了一个信号,例如

emit valueChanged(100),那么相当于你要调用和这个信号相连的槽,即上一句可以理解为调用

setNum(100)。

当然,信号和槽比上述调用要先进,例如可以在含有emit valueChanged(100)的函数执行完成后才调用setNum(100)函数。也可以在执行emit valueChanged(100)的地方调用setNum(100),setNum(100)执行完成后再继续执行下一句。就像“ianynchen”所说的那样相当于函数指针。

既然相当于函数调用,那么信号和槽的参数类型和顺序应该一致。当然如果信号的参数个数多于与其关联的槽的参数个数,多于的这些参数不可能传入槽中,因此被忽略了。

用信号和槽机制可以方便模块化程序设计,也就锋雹是说编写模块的时候不用理会发出的信号会被谁接收,接收后会干什么,同理不用理会信号由谁发出,如何发出。你可以试试看如果不用信号和槽机制,让一个模块调用另一个模块的函数,你会发现这时你需要对着两个模块的结构都有了解才能进行下去。

同时信号和槽可以动态链接和unconnect,非常灵活。

信号和槽是QT中的一个非常重要的内容,建议你多花时间模悉学习,灵活运用信号和槽可以大大简化你的程序设计工作。建议你好好看看帮助文档中关于信号和槽的那部分内容。

信号和槽的实现过程实际上是QT将你的源代码翻译了一下,变成了含有_moc的标准CPP源文件,然后才去编译连接。有时间的话你可以对比一下你的源代码和翻译后的含有_moc的源代码.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12329697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存