Qt4 to Qt5(持续更新)
新一年开启了,我也决定将工作环境迁移至 Qt5版本,据称 Qt4 至 Qt5 的升级相比前一代的迁移较为容易,其最大的变动便是 QWidget 的引入.
- 优化路径结构。许多在 Qt4 GUI 组件中 独立出来的 类被迁移到 widgets 模块。
- 为了提升兼容性需求,在包含头文件的操作上 进行了简化。
- 直接引入的是#include
。 - 从而实现了对 4、5 版本间的 兼容性弥补。
2,添加一个宏替换,Qt ::WFlag变成 Qt5 的 WindowFlags, 小问题。
针对插件系统进行了修改工作。 该新的Q_PLUGIN_METADATA被安置在插件实现类头部,并取代了旧有的CPP中的导出机制。 此修改不会影响迁移过程。 引入编译预处理宏用于判断特定标志,并根据标志来决定采用何种方法。
针对字符串处理方式的问题,在项目中采用中文、英文以及国际化处理时较为规范,并未出现编码错误问题。因此可以判断该系统的兼容性表现良好。
5,第三方依赖性
如果在构建应用程序时选择了PostgreSQL或MySQL的SQL连接插件,请确保将libpq和libmysql相关联的库文件复制至与可执行程序位于同一目录的空间中。否则即便能够识别这些驱动项,在实际运行时也可能导致连接失败。同样地,在配置OCI插件时,请避免将oci.dll复制至发布目录。相反地,在目标机器上使用其本地存储路径配置[ Oracle](http://www.linuxidc.com(topicnews.aspx?tid=12" Oracle" 连接实例以获取所需资源。
6,
toAscii()和fromAscii()已被弃用
替换
fromAscii()
toAscii()
为
fromLatin1()
toLatin1()
7,
QWorkspace已被弃用
当程序调用ActiveQt时, 原先的做法是在工程配置文件(.pro)中添加CONFIG += qaxcontainer, 现在需要更改为
QT += axcontainer
当然了,原来的CONFIG += qaxcontainer也将去除
在源代码中,默认情况下所有使用了原QtGui可视部件的地方都需更换其包含的头文件路径,并考虑引入QtWidgets模块以解决相关问题。
#include <QtGui/QPushButton> 要改成 #include
在以前使用#include
由于 Qt5取消了QTextCodec::setCodecForCStrings()函数,在涉及 C++ 中直接编写汉字时有两种解决办法
如果源文件原先采用GBK编码,则必须采用特定的方法将原有的中文字符置于特定对象中;否则可以选择直接切换至UTF-8编码系统(后者在MSVC环境下操作较为不便)。为了实现这一目标,在我的开发过程中采用了仅需调用QString::fromLocal8Bit()函数的方式,并且特别编写了一个辅助函数或宏以提高效率。(需要注意的是,在某些情况下可能需要额外处理)
b) 如果以前的源文件编码是UTF-8的,则什么都不用动。
过去我们采用QDesktopServices::storageLocation(QDesktopServices::xxxx)来访问一些系统目录位置。现在则需要改为通过QDesktopServices::saveToUserDir(QDesktopServices::xxxx)来完成同样的功能。
QStandardPaths::writableLocation(QStandardPaths::xxxx)
过去使用QFileDialog::getSaveFileName()时,在Windows环境下选择Native Dialog方式指定文件名仍可正常显示内容;然而,在Qt5版本中由于内部处理的变化导致无法正确显示文件名。因此,在后续版本中增加了相关的参数设置(如增加QFileDialog::DontUseNativeDialog选项),从而解决了这个问题。但需要注意的是,默认情况下会采用非系统界面;暂且接受这一设定即可。
另外指出,在使用Qt5时已经修复了ui_qaxselect.h文件的问题。当时在使用Activeqt时会遇到提示信息中没有该文件的情况,并且需要手动通过编写uic qaxselect.ui并将其转换为ui_qaxselect.h来解决这个问题。
第十四点涉及打印功能的相关类独立设置于QtPrintSupport模块中;因此,在编写代码时需要包含该头文件,并在编译器选项中标明QT += printsupport
应用了QWebPage等webkit相关可视化组件后,默认会将其移至独立的QtWebKitWidgets模块中,在开发过程中需包含头文件
在之前的版本中(如Qt4),并未提供cleanlooks、plastique、cde和motif这些主题样式。不过,在随后的发展中新增了一个专门针对Windows Vista风格设计的Fusion主题。然而,在我的项目框架原本是基于cleanlooks设计,并且附加了一些自定义样式表的情况下(即已经实现了部分功能),但升级到Qt5后发现现有样式的兼容性存在问题——现有样式的外观与Windows Vista操作系统界面(WMI)或者Fusion风格存在明显差异。因此,在未来升级至Qt5之前,请权衡一下当前项目的依赖关系是否有必要进行升级
.pro文件中的TARGET在使用QMake时,在qt版本为4(qmake v2)的情况下,默认情况下无需明确指定即可自动生成项目名称。但在qt版本升级至5(qmake v3)后,默认情况下默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成,默认值将不再自动生成
