Windows界面Qt4升级到Qt5中遇到的问题及解决方案

目的

旧的软件是基于Qt4的,项目升级要换掉界面平台Qt5,这里记录中间出现的问题。

出现的问题及解决方案

  1. 头文件变化

由于qt版本升级,不少文件和类发生变化,需要将软件中用到qt的代码段中对应的包含头文件进行逐一修改和删除。e.g.需要将QtGui替换为QtWidgets,其中还有QT5中弃用的一些头文件qwidgets.h等.

  1. 类成员函数名字变动,如:
setResizeMode==>setSectionResizeMode(QHeaderView中)
setClickable==>setSectionsClickable
setName==>setObjectName
selectedfiles==>selectfile(filepathname)(原有的定义方式被弃用,采用新的语法格式)
setShown==> setVisible
Qt::WFlags==>Qt::WindowsFlags

需要将全部的错误提示地方逐一进行修改。

  1. qt5中对中文不友好而软件界面有时必要采用中文。

qt升级之后toStdString()函数失效,需要通过tolocal8bit().ConstData()才能将QString转换为const string,进而显示中文,其他格式还有toascii==>tolocat8bit。其次qt中使用UTF-8对源码进行编码,vs中采用GBK进行编,因此界面中的中文会变成乱码。
实际使用时在需要使用中文的头文件头部设置如下:

#pragma execution_character_set("utf-8") // show Chinese 

此外Qt5界面中的中文则可采用QStringLiteral宏进行设定。在窗口界面&控制台命令输出&日志文件&boost读取写入文件时中文编码之间的转换问题比较麻烦,各种不同格式之间来回转换,很容易出现问题。备注一下不同qt中如何使用中文。
原先Qt4中使用如下的三行来处理中文(需要QTextCodec这个头文件)

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

而在Qt5中仅需QTextCodec::setCodecForLocale(QTextCodec::codecForName ("UTF-8"));

  1. 弃用的共享库文件

qt5中修改了lib库文件的名字,同时舍去了部分lib库,e.g. phonon4.lib ,故添加附加依赖项时直接去掉对应的项即可。

  1. error: ‘UnicodeUTF8’ is not a member of ‘QApplication’

原因:QCoreApplication::UnicodeUTF8已被弃用
解决方案

  • 修改setText(QApplication::translate("MainWindow", "&Quitar", 0, QApplication::UnicodeUTF8));
  • setText(QApplication::translate("MainWindow", "&Quitar", 0);
  • 在修改中文编码方式时utf-8=utf_8可产生相同的效果
  1. error: The kit Desktop Qt 5.13.0 MSVC2017 64bit has configuration issues which might be the root cause for this problem

原因:.pro文件路径中包含了中文,导致无法识别。
解决方案:将.pro文件路径修改为英文即可,此外需要将之前产生的.pro.user文件删除,不然会影响再次构建。然后重新构建qt工程即可。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值