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>("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对对象进行实例化。

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

<think>嗯,用户遇到了Qt平台插件错误问题,需要解决方案。让我先回忆一下之前学过的相关引用内容。引用[1]提到要检查libqxcb.so文件的路径,可能需要用find命令查找。引用[5]讲的是在VS2013环境下配置Qt的步骤,特别是关于路径和平台类型的设置。其他引用虽然提到Qt的跨平台编译和模块设计,但可能和当前问题关联不大。 首先,用户的问题是关于Qt平台插件错误的,常见的错误是找不到插件或者插件与当前平台不兼容。根据引用[1],确认插件路径是否正确是关键。在Linux下,可能需要设置QT_QPA_PLATFORM_PLUGIN_PATH环境变量指向正确的路径。比如,如果通过find命令找到了libqxcb.so的位置,就需要把这个路径设置进去。 然后,引用[5]提到在Windows环境下,需要确保Qt的版本和项目的平台配置一致,比如64位或32位。如果项目配置的是x64,但Qt插件路径指向的是32位的库,就会出问题。这时候需要检查Qt Options中的路径是否正确,以及解决方案配置是否统一为x64。 可能还需要检查应用程序的部署情况,是否缺少必要的插件文件。比如在Windows下,要把platforms文件夹放在可执行文件旁边,或者设置正确的环境变量。对于Linux用户,可能需要安装额外的依赖库,比如libxcb-xinerama0。 另外,用户可能没有明确说明他们使用的操作系统,但根据错误类型,可能是Linux或Windows。需要针对不同系统给出对应的解决方案。同时,建议用户检查Qt的安装是否完整,或者尝试重新安装Qt以修复可能的文件缺失。 总结一下,解决方案应该包括检查插件路径、环境变量设置、平台一致性配置、依赖库安装以及部署时的文件结构。分步骤说明,确保用户能逐步排查问题。最后生成相关问题,帮助用户深入理解可能相关的其他问题,比如环境变量配置或部署步骤。</think>### Qt平台插件错误解决方案 Qt平台插件错误通常表现为"Could not find the Qt platform plugin xcb"或"Failed to load platform plugin",以下是分步解决方案: #### 1. 检查插件路径配置(关键步骤) 在Linux系统下执行查找命令确认插件位置: ```bash find /usr/lib/x86_64-linux-gnu/qt5/plugins/ -name libqxcb.so ``` 设置环境变量指向正确路径: ```bash export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ ``` (Windows系统需检查路径如:`C:\Qt\5.15.2\msvc2019_64\plugins\platforms\`)[^1] #### 2. 验证平台一致性 检查编译配置是否匹配(以VS2013为例): - Qt Options中配置的msvc版本需与项目平台一致(x86/x64) - 解决方案属性中平台工具集需匹配Qt版本 - 链接器->高级->目标计算机需一致(X64对应64位)[^5] #### 3. 修复依赖关系 Linux系统可能需要安装: ```bash sudo apt-get install libxcb-xinerama0 sudo apt-get install --reinstall libxcb-xinput0 ``` #### 4. 部署环境检查 确保可执行文件目录包含: ``` your_app ├── platforms/ │ └── qwindows.dll (Windows) │ └── libqxcb.so (Linux) └── Qt5Core.dll (对应平台动态库) ``` #### 5. 代码调试(进阶) 在main函数起始处添加诊断代码: ```cpp qDebug() << "Library paths:" << QCoreApplication::libraryPaths(); qDebug() << "Plugin paths:" << QCoreApplication::pluginPaths(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值