Qt5和Qt4版本相容性

你曾經下載以前Qt4的範例,然而用Qt5卻編譯失敗嗎?


Qt5將功能清楚地分割和簡化,然而造成新舊版本不相容問題, 例如Qt5無法成功編譯Qt的Google Map. 還有,你也可能遇到所使用此開源程式碼只支持Qt4,例如開源地圖軟件QGIS.然而,工程師難免遇到程式碼更新或維護舊版的軟體,所以每次Release軟體時都手動修改程式碼後建置嗎?這樣操作不但無形中浪費時間,而且也限制你的程式擴展性.

下表,我整理出這兩個版本相關類別差異,我們主要根據Qt版本修正標頭和專案檔,而Qt的版本檢查主要有以下幾種:

  1. 專案檔,參數QT_MAJOR_VERSION檢查Qt主要版本號:
    • 若Qt的版本大於4,需要引用那些模組:
    • greaterThan(QT_MAJOR_VERSION, 4):
      

    • 若Qt的版本小於5,需要引用那些模組:
    • lessThan(QT_MAJOR_VERSION,5):
      

  2. 標頭,加入標頭QtGlobal利用巨集QT_VERSION得到Qt版本
  3. #include <QtGlobal>
    #if QT_VERSION >= 0x050000
    //版本大等於5需加入那些標頭
    #else
    //版本小於5需加入那些標頭
    #endif
    

版本對照表

類別
描述
Qt4
Qt5
QApplication
管理GUI應用程式控制流向和主要設置
標頭(Header)
#include<QtGui/QApplication>
#include <QApplication>
專案檔(.pro)
QT += gui
QT += widgets
QWebFrame
在網頁呈現Frame
標頭(Header)
#include <QWebFrame>
專案檔(.pro)
QT += gui
QT += webkitwidgets
QtMultimedia
在QML上操控多媒體內容
標頭(Header)
#include <QtMultimedia>
專案檔(.pro)
QT += multimedia
CONFIG += mobility
MOBILITY += multimedia
QT += multimedia

編譯環境

  • Windows 7 64bit
  • Qt 5.3.1(MinGW 4.8 32 bit)
    • 建議:Qt 4.0以上的版本: 編譯器MINGW

下載

  • GitHub
    • 這是已經修改好的範例,僅供參考

教程

  1. 首先, 為了連結到在Qt5版本到所獨立出來的模組,請在.pro的加入以下的程式碼.

  2. greaterThan(QT_MAJOR_VERSION, 4): QT+=widgets webkitwidgets
    

    圖一. 修改專案黨


  3. 接著,若要加入類別QApplication,請先加入QtGloabl然後根據巨集QT_VERSION的Qt版本加入正確標頭.

  4. #include <QtGlobal>
    #if QT_VERSION >= 0x050000
    #include <QApplication>
    #else
    #include <QtGui/QApplication>
    

    延伸閱讀

    [1] Qt 4.8: API Document
        http://qt-project.org/doc/qt-4.8/classes.html
    [2] Qt 5.3: API Document
        http://qt-project.org/doc/qt-5/classes.html

    留言

    這個網誌中的熱門文章

    VirtualBox教學:重設硬碟(.vdi)大小(上)

    VirtualBox教學:重設硬碟(.vdi)大小(下)

    VirtualBox教學: 新增Windows7虛擬電腦(下)