標籤:android qt qt for android qt on android
使用 Qt 為 Android 開發應用時,有時我們的應用會攜帶一些資源檔,如 png 、 jpg 等,也可能有一些設定檔,如 xml 等,這些檔案放在哪裡呢?
有兩種方式:
- qrc
- assets
咱們分別來看下。
the Qt Resource System
qrc , Qt 的資源檔系統,很好用哦。看個圖:
圖1 qrc
你放在 qrc 裡的檔案,如 copy.png ,會被編譯到 exe 檔案中(Android應用是 libapplication.so )。當你運行應用時,這些資源也會被載入到記憶體。如果你的資源很大,這是個問題。
如果是在 Android 平台上,你還有另外一個選擇。
Android 的 assets
Android 項目目錄中有一個 assets 目錄,該目錄內放置的檔案會原封不動打包到 APK 中,APK 在 Android 系統安裝時, assets 不會被安裝到應用目錄下,注意,它還在 APK 裡哦,但是應用可以訪問這個檔案夾內的資源!
Qt 利用了這種機制,實現了 assets 虛擬檔案系統,我們常見的 QFile 、 QPixmap 、 QImage 等,都可以通過 "assets:/" 的方式來訪問 assets 內的檔案。
使用 assets 虛擬檔案系統,你的資源檔不會在程式啟動時就載入到記憶體,比較節省資源。
看一個圖:
圖2 assets
那資源檔怎麼放呢?很簡單,就是放在 Qt 項目目錄下的 android/assets 檔案夾內即可。3:
圖3 使用 assets 的目錄結構
只要你這麼一放, Qt 編譯時間就會把 assets 內的檔案打包到 APK ,然後就可以在 C++ 代碼內訪問了。
使用 assets 的 Android 樣本
參考《Qt on Android:圖文詳解Hello World全過程》建立一個針對 Android 的項目。
建立 AndroidManifest.xml ,然後在 android/assets 目錄下放一個 beauty.jpg 。刪除項目的 widget.h 和 widget.cpp 。修改 main.cpp ,如下:
#include <QApplication>#include <QLabel>#include <QPixmap>int main(int argc, char *argv[]){ QApplication a(argc, argv); QLabel label; QPixmap pixmap("assets:/beauty.jpg"); label.setPixmap(pixmap); label.show(); return a.exec();}
編譯,運行,可以看到圖 4 :
圖 4 使用 assets 的 Qt on Android 樣本
OK,到此結束。
回顧一下 Qt on Android 系列:
Qt on Android:圖文詳解Hello World全過程
Windows下Qt 5.2 for Android開發入門
Qt for Android 部署流程分析
Qt on Android:將Qt調試資訊輸出到logcat中
Qt on Android: Qt 5.3.0 發布,針對 Android 改進說明
Qt on Android Episode 1(翻譯)
Qt on Android Episode 2(翻譯)
Qt on Android Episode 3(翻譯)
Qt on Android Episode 4(翻譯)
Qt for Android 編譯純C工程
Windows下Qt for Android 編譯安卓C語言可執行程式
Qt on Android: Android SDK安裝
Qt on Android: http下載與Json解析
Qt on Android 之設定應用程式名稱為中文
Qt on Android:讓 Qt Widgets 和 Qt Quick 應用全螢幕顯示
Qt on Android:怎樣適應不同的螢幕尺寸
Qt on Android:使用JNI與第三方jar包
《Qt on Android核心編程》介紹
Qt on Android:qrc與assets