qt4 向 qt5 迁移

转载自:http://blog.csdn.net/lainegates/article/details/46314227


qt5比qt4有了一些进步,而且从qt4向qt5迁移难度不大,具体详见 http://doc.qt.io/qt-5/qt5-intro.html 。总之,早点学习有好处。



本文总结果我在迁移过程中的一些心得。


一、qt4与qt5配置上不同
1.1常用环境变量。
qt5 中常用的module大致有Qt5Core, Qt5DBus, Qt5Gui, QtWidgets, Qt5Multimedia, Qt5Network, Qt5OpenGL, Qt5Qml Qt5Quick, Qt5WebKit 等。
每一个module 几个固定的变量,以Qt5Widgets为例,它有:

[plain]  view plain  copy
  1. Qt5Widgets_VERSION_STRING                 module版本号  
  2. Qt5Widgets_LIBRARIES                      可在target_link_libraries时链接用的库  
  3. Qt5Widgets_INCLUDE_DIRS                   相关的头文件目录  
  4. Qt5Widgets_DEFINITIONS                    与add_definitions配合使用的定义  
  5. Qt5Widgets_COMPILE_DEFINITIONS            与COMPILE_DEFINITIONS 属性配合使用的定义  
  6. Qt5Widgets_FOUND                          是否查找成功  
  7. Qt5Widgets_EXECUTABLE_COMPILE_FLAGS       编译可执行文件时的选项  

2.2 文件迁移
qt4的Gui模块中包含了所有的图形控件,在qt5中全部迁移到了Qt5Widgets。相应的,#include<QtGui/QLabel>就要替换为#include<QtWidgets/QLabel>


二、使用实例
了解了常见变量,剩下的就好办了。在qt5中,将各个模块分离,find_packages也就相应分离查找,这个只用到自己所需的,可减少结果文件的大小。
qt官网推荐使用cmake 2.8.11以上版本的cmake,本文也只讲解这个版本下qt5的使用。仍以Qt5Widgets为例:

[plain]  view plain  copy
  1. cmake_minimum_required(VERSION 2.8.11)  
  2. project(testproject)  
  3. set(CMAKE_PREFIX_PATH ${path_to_qt5_root})        # 非常重要!只有路径对了,qt5能找到所有的modules  
  4. set(CMAKE_INCLUDE_CURRENT_DIR ON)                 # qt5官网推荐包含当前目录  
  5. set(CMAKE_AUTOMOC ON)                             # 非常重要!这会让cmake设定在需要时moc相关文件  
  6. find_package(Qt5Widgets REQUIRED)                 # 加上REQUIRED, 如果查找失败,在第一时间得到消息  
  7. add_executable(helloworld WIN32 main.cpp)  
  8. target_link_libraries(helloworld Qt5::Widgets)    # 其他module也类似,均为Qt5::<module>  
如果使用了Qt5Core,一定要include_directories(${Qt5Core_INCLUDE_DIRS}), 否则会找不到相关头文件(mac上)


三、引入文件
qt5中加大了对引入文件(IMPORTED targets)的应用,引入文件包括所有module相关文件(头文件、库等),方便使用。
3.1 属性
用户可以通过引入文件访问属性,如:

[plain]  view plain  copy
  1. find_package(Qt5Core)  
  2. get_target_property(QtCore_location Qt5::Core LOCATION)  # LOCATION是枚举量,cmake定义的,其他变量参见 http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:LOCATION  

3.2 配置
用户也可以使用引入文件配置configure过程。如将configure配置为release:

[plain]  view plain  copy
  1. find_package(Qt5Core)  
  2. set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")  
  3. set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")  

3.3 插件
qt5中 Qt5Network, Qt5SQL, Qt5GUI, and Qt5Widgets 有插件,通过引入文件就可以方便的访问:

[plain]  view plain  copy
  1. foreach(plugin ${Qt5Network_PLUGINS})  
  2.   get_target_property(_loc ${plugin} LOCATION)  
  3.   message("Plugin ${plugin} is at location ${_loc}")  
  4. endforeach()  

四、宏
宏这一部分变化很小,只是将宏命名中的qt4变为qt5。以下不列举宏说明,只列举宏位置。
Qt5Core包含:qt5_wrap_cpp、qt5_add_resources、qt5_generate_moc、qt5_use_modules
Qt5Widgets包含:qt5_wrap_ui
Qt5DBus包含:qt5_add_dbus_interface、qt5_add_dbus_interfaces、qt5_add_dbus_adaptor、qt5_generate_dbus_interface
Qt5LinguistTools包含: qt5_create_translation、qt5_add_translation


五、细节变化
参照官网:https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值