close

如何採用外部資源檔開發Windows QT?

啟稿: 2015/01/01

完稿: 2015/01/01

 

QT CueTai線索台

跨平台實作05-跨平台實作進階:採用外部資源檔,Windows下之實例

 

看過AppleMac OS XiOS使用者可以自行放入想要的音效檔架構範例後,現在來看Windows作業系統的範例。

 

l   QT下建置Windows執行檔

Windows作業系統下的exe執行檔就純粹是執行檔,並沒有封裝結構;所以可以自行在檔案總管自行複製整個Resources/目錄到執行檔所在目錄下,並不需要特殊處理的;但是QT若能提供如同之前我們在analogclock.pro中為了Mac OS X所加入的巨集命令QMAKE_BUNDLE_DATA而能自動幫我們建立的話,就會非常方便而不至於忘記。

 

根據上次在Mac OS X app上的經驗,這方面的訊息可以用"deployment" keyword來試著得到你要的資訊;在QT說明畫面的搜尋欄位輸入keyword " QT for Windows deployment",得到的說明如下:

 05-01  

 

這也是一篇相當豐富而有用的資料,不過它重點放在靜態及動態連接檔編譯、所需DLL確認及最後封裝發佈!很可惜沒有提到我們想要的巨集方法!不過下次我們研究如何封裝發佈時,將可作為參考。若再加上keyword "Bundle"也找不到相關資訊;上網Google去搜尋,曾經有網文提到要用巨集INSTALLS來進行,但很可惜的是實測的結果不work,但是在QT說明中搜尋所得到的結果似乎就是這個巨集,下面就是利用keyword "Qmake INSTALLS"顯示巨集INSTALLS的用法:

 05-02

 

照原文Specifies a list of resources that will be installed when make install or a similar installation procedure is executed 的意思,不就是在安裝或類似的過程中將所列的資源檔一起安裝,但為什麼不能work?仔細接著有提到,進一步資訊請看Installing Files!

連結到Installing Files的說明就會發現此功能似乎是針對Unix作業平台設計的,所以Windows作業平台就不作用嗎?目前為止還是沒有答案,所以也只能自行在檔案總管複製整個Resources/目錄到執行檔所在目錄下;若各位先進有方法,麻煩分享!

 05-03

 

l   修改程式

首先在Windows作業系統平台上我們會手動複製整個Resources/目錄到建置目錄下,所以我們在程式中取用的時候就如同當初在Mac OS X寫法一樣:

    soundQuarter=newQSound("Resources/alarm.wav");

不過QTWindows作業系統平台上,建置時的初始設定目錄位置在debugrelease是完全不同的兩個目錄,如debug時建置的目錄如下:

        E:\QtWork\build-analogclock-Desktop_Qt_5_3_0_MinGW_32bit-Debug

release時建置的目錄如下:

        E:\QtWork\build-analogclock-Desktop_Qt_5_3_0_MinGW_32bit-Release

但建置出來的執行檔exe卻放在更下層的目錄;如debug時執行檔放在的目錄如下:

        E:\QtWork\build-analogclock-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug

release時執行檔放在的目錄如下:

        E:\QtWork\build-analogclock-Desktop_Qt_5_3_0_MinGW_32bit-Release\release

 

所以為了程式的一致性,我們必須在原始碼中判斷目前的狀態,無論ebugrelease都將目前執行目錄移到執行檔所在目錄位置;因此我們在analogclock.hS_ AbsPath變數,就是要紀錄最後要到的執行目錄位置

程式一開始執行時就要知道目前是在何種狀況,來改變執行時所在目錄位置,我們用OpNow來知道是在開發平台debug/release狀態下,還是建置後正式執行app;所以程式一開始改成如下:

        clock.S_CurrentPath=clock.D_Current.path()+"/";
        if(clock.OpNow==clock.DEBUG_)
        //#ifdefQ_DEBUG
            clock.S_OpPath="debug/";
        elseif(clock.OpNow==clock.RELEASE_)
            clock.S_OpPath="release/";
        else
            clock.S_OpPath="";
        clock.S_ResPath="Resources/";
           clock.S_AbsPath=clock.S_CurrentPath+clock.S_OpPath;
           QDir::setCurrent(clock.S_AbsPath);

 

若要取資源檔,都是往Resources/目錄下取檔案即可!如下用法:

        soundQuarter=newQSound(S_ResPath+"alarm.wav");

 

l   建置與執行

在在QT開發平台debug/release狀態下,記得最前端加入以下一行程式:

    clock.OpNow=clock.DEBUG_;                     //APP_,DEBUG_,RELEASE_

要建置正式執行app則改為:

    clock.OpNow=clock.APP_;                       //APP_,DEBUG_,RELEASE_

如此就大功告成,在Window作業平台目錄結構如下:

 05-04

 

l  延伸應用及問題

接下來Android平台會像Windows, Mac OS還是iOS呢?

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Philip4G 的頭像
    Philip4G

    Philip4G四眼仙機的部落格

    Philip4G 發表在 痞客邦 留言(0) 人氣()