文章目录
目的
旧的软件是基于Qt4的,项目升级要换掉界面平台Qt5,这里记录中间出现的问题。
出现的问题及解决方案
- 头文件变化
由于qt版本升级,不少文件和类发生变化,需要将软件中用到qt的代码段中对应的包含头文件进行逐一修改和删除。e.g.需要将QtGui
替换为QtWidgets
,其中还有QT5中弃用的一些头文件qwidgets.h
等.
- 类成员函数名字变动,如:
setResizeMode==>setSectionResizeMode(QHeaderView中)
setClickable==>setSectionsClickable
setName==>setObjectName
selectedfiles==>selectfile(filepathname)(原有的定义方式被弃用,采用新的语法格式)
setShown==> setVisible
Qt::WFlags==>Qt::WindowsFlags
需要将全部的错误提示地方逐一进行修改。
- 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"));
- 弃用的共享库文件
qt5中修改了lib库文件的名字,同时舍去了部分lib库,e.g. phonon4.lib ,故添加附加依赖项时直接去掉对应的项即可。
- 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可产生相同的效果
- 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工程即可。