目前日期文章:201406 (3)

瀏覽方式: 標題列表 簡短摘要

QML extension

 


 

For QML extension (inherits from QQmlExtension) , you have to place the custom QML extension into the qml folder in Qt installed directory (ex: /Users/diro/Qt5.3.0/5.3/android_armv7/qml).

Take the extension DiroComponent for example, then you should have a directory named /Users/diro/Qt5.3.0/5.3/android_armv7/qml/DiroComponent , and the libDiroComponent.so & qmldir should be put in the directory, too. Finally, the androiddeployqt tool will pack this custom QML extension into the APK file for deploying. 

For the underlying detail, the androiddeployqt will rename the .so file into libqml_DiroComponent_libDiroComponentExtension.so, and copy it into build_dir/android-build/libs/armeabi-v7a (Actually, all the native .so shared library are placed here)

Now you can enjoy your QML without any modification.

 


 

QML extension (inherits from QQmlExtension) 的作法比較特別,你必需把你的 QML extension 乖乖的放到 qt 安裝目錄中的 qml 資料夾(ex: /Users/diro/Qt5.3.0/5.3/android_armv7/qml)。例如你有個 extension 叫做 DiroComponent,那麼你就會有個
/Users/diro/Qt5.3.0/5.3/android_armv7/qml/DiroComponent 資料夾,並在裡頭放著你的 .so & qmldir,這樣子 androiddeployqt 就會把你的 QML extension 打包進 APK 中。

打包的細節部份,他會 rename 你的 .so,變成 libqml_DiroComponent_libDiroComponentExtension.so ,並放進 build_dir/android-build/libs/armeabi-v7a 裡頭(其實所有的 .so 都會被放在這,包含 implicit&explicit link 的 shared library)

這樣子你就可以在你的 QML 中快樂的使用這些 extension ,不需要做任何更改。

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

在很多時侯我們會用到自己開發的Plugin,但是在Android平台上要如何才能載入呢?

重點在於要把要被載入的plugin (.so) 放在正確的資料夾

build/android-build/libs/armeabi-v7a

這樣就可以正確被load到了。

 

但如果有些 plugin 是在其它 project 中預先 prebuilt 好的,那麼要怎麼樣包進來呢?

作法1 - ANDROID_EXTRA_LIBS

基本上這是最標準的用法,如果沒什麼問題,只要把你會用到的lib (.so) 加進這個變數即可

http://qt-project.org/doc/qt-5/deployment-android.html

 

作法2 - Custom Process Step

你必需在 project 中新增一個 Custom Process Step,在 androiddeployqt 打包之前把 .so 放好,以便一並併入 .apk 中。

[Make install]

[Custom Process Step]

cp xxx.so build/android-build/libs/armeabi-v7a/xxx.so

[Deploy Configurations]

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

新版的QtQuick已經改用QQmlApplicationEngine取代原本的viewer class,因此要取得application的snapshot作法也不大相同:

class SnapshotMgr

{

void getSnapshot(void);

QQmlApplicationEngine m_pEngine;

}

void SnapshotMgr::getSnapshot(void)

{

if(!m_pEngine)
return-1;

foreach(QObject*obj,m_pEngine->rootObjects()){
QQuickWindow*window=qobject_cast<QQuickWindow*>(obj);
if(window){

QImageimage=window->grabWindow();
image.save("./test_screenshot.jpg");
qDebug()<<image;
}
}
return0;
}

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