WHAT'S NEW?
Loading...

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

    Qt與Google Map:編譯QJson

    上一篇教你如何使用Git Bash下載Qt的Google Map的範例,由於此範例利用JSON 存取位置資訊,因此還需要編譯第三方函式庫QJson,所以未編譯QJson之前是無法執行此範例.

    Json是一種輕量型資料交換格式,它可以記錄整數,實數,字串,依順序排列的數值和一系列成對數字和名字.QJson是將JSON 的資料轉換成Qt的資料型態QVarient,也就是說利用此函式庫很輕易使用Qt管理JSON 資料.

    QJson官方介紹有兩種方法可以編譯此函式庫,而本篇將只說明如何利用CLI Way編譯此範例,若有教程有任何不清楚的地方,請參考教學影片.
    1. CLI Way
    2. GUI Way
    順帶一提,請不要使用GitHub網頁按下『Download ZIP』下載QJSON,否則無法編譯成功.請使用上一篇Git Bash下載此函式庫.

    編譯環境

    • Windows 7 64bit
    • Qt 5.3.1(MinGW 4.8 32 bit)
      • 建議:Qt 4.0以上的版本: 編譯器MINGW
    • QJSON GitHub Page
      • https://github.com/flavio/qjson
    • CMake 3.0.2以上

    教學影片


    TokyoLoader:下載優酷、土豆等大陸影音網站

    你知道大陸影音網站有分段下載限制嗎?

    圖一.Freemake無法完整下載優酷影片


    之前在Freemake下載線上影片證明他能完整下載Youtube影片,然而在大陸影音網站卻完全行不通.如上圖所示,你按下『Paste URL』按鈕加入大約有23分鐘優酷影片,但它只下載六分鐘,甚至你需要繼續播放一段時間才能下載影片,這是Freemake程式bug嗎?  不是,而是大陸影音網站將影片分段防止他人下載.

    目前,中文解決方案是安裝此影音網站的下載器和安裝碩鼠,但是大陸軟體一般有安全性風險,而且無法從瀏覽器直接下載.所以沒有其他替代方案嗎?有,日本人開發一套下載軟體TokyoLoader,雖然目前只有日本語系,然而它在Chrome瀏覽各大陸網站時,很貼心在畫面右側增加下載按鈕選項,如下圖二所示.換句話說,當你觀看影片時,你無須切換畫面只需要按下TokyoLoader圖示,即可下載影片.


    最後,由於有版權影片擋台灣IP,若要下載影片請安裝Unblock Youku,我就將不在贅述.

    圖二.TokyoLoader下載圖示位址

    作業環境

    • Windows 7 64bits
    • TokyoLoader-目前只支援日文版
    • (optional) 安裝Chrome附加元件-Unblock Youku

    教學影片