QT之网络编程错误总结

一、

QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError'
(Make sure 'QAbstractSocket::SocketError' is registered using qRegisterMetaType().)


错误描述:在QThread内将QTcpSocket对象信号(connected、error、stateChangeed)与槽函数连接报数据类型未注册。


报错原因:connect自动连接在线程类中的信号默认是排队模式QueuedConnection,因此需要注册参数类型。


解决方法:将默认connect的连接方式改为Qt::DirectConnection,就不需要类型信息。



QT信号与槽的连接方式:   
Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection,如果信号与槽不在同一线程,将采用Qt::QueuedConnection的连接方式。   
Qt::DirectConnection表示一旦信号产生,立即执行槽函数。   
Qt::QueuedConnection表示信号产生后,将发送Event给你的receiver所在的线程,postEvent(QEvent::MetaCall,...),slot函数会在receiver所在的线程的event loop中进行处理。   
Qt::BlockingQueuedConnection表示信号产生后调用sendEvent(QEvent::MetaCall,...),在receiver所在的线程处理完成后才会返回,只能当sender,receiver不在同一线程时才可以。   
Qt::UniqueConnection表示只有它不是一个重复连接,连接才会成功。如果之前已经有了一个链接(相同的信号连接到同一对象的同一个槽上),那么连接将会失败并将返回false。   

你可能感兴趣的:(网络编程,qt)