QT开发常见问题汇总(持续更新)

编写目的

分享QT开发过程中可能遇到的问题及相应的解决方案。

常见问题(分类)

定义

Q_OBJECT定义

继承了QObject类,才具有信号槽的能力;凡是QObject类,都应该在第一行代码写上Q_OBJECT,这个宏展开将为类提供信号槽机制、国际化机制以及QT提供的不基于C++ RTTI的反射能力。

注意,moc只处理头文件中标记了Q_OBJECT的类声明,不会处理cpp文件中的类似声明,所以需要将这个宏定义在头文件中

编译

条件编译

出于版本管理的需求,进行预编译宏控制的条件编译时,若涉及Q_OBJECT声明的类,注意同步MSVC编译环境(Windows环境)与MOC编译环境的预编译宏,否则容易出现因预编译宏不一致导致的编译问题。

或仅管理相关模块的调用流程,无需设置MOC环境(相关模块代码编译在可执行文件中)。

调试

QT调试信息

在Visual Studio中调试QT环境,可能因QT VS Tools配置文件加密或损坏导致调试过程中无法查看QString等类型信息。

解决方案

Visual Studio环境启动后,更换相应的配置文件。C:\Users\TR\Documents\Visual Studio 2019\Visualizers下的qt5.natvis文件,即可在调试过程中查看QString等变量信息。

如上图所示,替换qt5.natvis文件后,调试过程可正常查看QString及QVector等类型的信息。

翻译

换行符

QT Linguist内,无论是用哪种符号“\r\n”、“\n\r”、“\n”,都会被识别成字符串,所以在Linguist语言家中,翻译部分加上回车符、换行符是无效的。

最简单的解决方案,直接在Linguist的翻译里按下Enter回车键,可实现换行。

多语言翻译

加载多语言翻译文件后,再进行涉及翻译的代码模块初始化,加载翻译文件之前的模块无法翻译。

网络通信

HTTP

使用QNetworkReply类实现HTTP通信时,需注意QT可能将错误码进行内部转义。

ConstantValueDescription
QNetworkReply::ContentAccessDenied201the access to the remote content was denied(similar to HTTP error 403)
QNetworkReply::ContentNotFoundError203the remote content was not found at the server(similar to HTTP error 404)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值