而且连接的时候只要写明参数的类型就可以了物型郑 你这里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的源代码.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)