Qt5和Qt4版本相容性
你曾經下載以前Qt4的範例,然而用Qt5卻編譯失敗嗎?
Qt5將功能清楚地分割和簡化,然而造成新舊版本不相容問題, 例如Qt5無法成功編譯Qt的Google Map. 還有,你也可能遇到所使用此開源程式碼只支持Qt4,例如開源地圖軟件QGIS.然而,工程師難免遇到程式碼更新或維護舊版的軟體,所以每次Release軟體時都手動修改程式碼後建置嗎?這樣操作不但無形中浪費時間,而且也限制你的程式擴展性.
下表,我整理出這兩個版本相關類別差異,我們主要根據Qt版本修正標頭和專案檔,而Qt的版本檢查主要有以下幾種:
Qt5將功能清楚地分割和簡化,然而造成新舊版本不相容問題, 例如Qt5無法成功編譯Qt的Google Map. 還有,你也可能遇到所使用此開源程式碼只支持Qt4,例如開源地圖軟件QGIS.然而,工程師難免遇到程式碼更新或維護舊版的軟體,所以每次Release軟體時都手動修改程式碼後建置嗎?這樣操作不但無形中浪費時間,而且也限制你的程式擴展性.
下表,我整理出這兩個版本相關類別差異,我們主要根據Qt版本修正標頭和專案檔,而Qt的版本檢查主要有以下幾種:
- 專案檔,參數QT_MAJOR_VERSION檢查Qt主要版本號:
- 若Qt的版本大於4,需要引用那些模組:
- 若Qt的版本小於5,需要引用那些模組:
- 標頭,加入標頭QtGlobal利用巨集QT_VERSION得到Qt版本
greaterThan(QT_MAJOR_VERSION, 4):
lessThan(QT_MAJOR_VERSION,5):
#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
- 這是已經修改好的範例,僅供參考
教程
- 首先, 為了連結到在Qt5版本到所獨立出來的模組,請在.pro的加入以下的程式碼.
- 接著,若要加入類別QApplication,請先加入QtGloabl然後根據巨集QT_VERSION的Qt版本加入正確標頭.
greaterThan(QT_MAJOR_VERSION, 4): QT+=widgets webkitwidgets
圖一. 修改專案黨 |
#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
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
留言
張貼留言