Qt各类型错误总结

 

问题1.QMetaObject::connectSlotsByName: No matching signal for ...

            但实际功能并没有受影响

原因:如果采用显式connect的方法的同时,又将槽函数的名字起成了“on_控件名_信号名”的格式,那么就会在运行时弹出

“QMetaObject::connectSlotsByName: No matching signal for”的警告了!

解决:只要将槽函数名字不按“on_控件名_信号名”的格式写就行。

 

问题2:串口readyread()信号无法转到槽的原因

解决:加上下面一行语句

m_port->setDataTerminalReady(true);         //设置 DTR 为高电平

原因:未知

 

问题3:QObject::connect: Cannot queue arguments of type"..."

一般是关联不同进程的函数时会出现的问题

解决1:connect时添加参数Qt::DirectConnection

解决2:可在使用前注册该类型即可,qRegisterMetaType("s_MSGBoxInfo");

 

问题4:error: collect2: error: ld returned 1 exit status

原因:一般是没有包含特定的头文件;还有可能是前一程序打开未关闭,就打开了新程序。

解决:我是在将QT程序从window系统移植到Linux系统时遇到,原程序在window中正确,放进Linux就报错了。因为我在程序中使用了线程,而线程的库pthread是Linux系统的库,所以得在.pro文件中加上:

LIBS += -lpthread

如果读者是添加了其他库,那么在.pro文件中添加对应库即可。

 

问题5:undefined reference to `vtable for’”

原因:QT中,类要支持信号与槽机制,需要继承自QObject并在头文件开头添加Q_OBJECT宏. 
如果使用QtCreator创建类时,没有选择继承自QObject类或其子类,而在创建后手工修改继承自QObject并手工添加Q_OBJECT宏,则在编译时有可能会出现”undefined reference to `vtable for’…….”错误.

解决:把新创建的类从项目中移除(主要不要从磁盘上删除),然后再添加进功能,QtCreator就会重新解析此类,再编译就不再会出现上述错误.

 

问题6:E:\SogouInput\6.7.0.0329\程序异常终止

原因:使用声明的对象时,没有使用new对对象进行实例化。

解决:如果能直接看出来最好。如果实在找不到原因,建议采用注释代码的方法按照代码段逐渐调试,只是找出出错的代码。

你可能感兴趣的:(QT,技巧)