11

Qt 5.1.0 Android インストールから TimeExample Qt Quick Extension Plugin をインポートしようとしています。

libqmlqtimeexampleplugin.soに正常に組み込まれていますbuild-plugins-Android_for_arm_GCC_4_6_Qt_5_1_0-Debug/imports

次に、Qt Creator から簡単な Qt Quick2 アプリケーション (ビルトイン Elements) を作成しました。出力「.apk」パッケージで QML プラグインを取得するには、アプリケーション プロジェクト ファイルに何を追加すればよいですか?

今それは言います:

W/Qt (23528): assets:/qml/TimeExampleTest/main.qml:2 (): assets:/qml/TimeExampleTest/main.qml:2:1: モジュール「TimeExample」がインストールされていません

main.qml

 import QtQuick 2.0

 import TimeExample 1.0 // import types from the plugin

 Rectangle {
    width: 360
    height: 360
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
       anchors.fill: parent
        onClicked: {
          Qt.quit();
       }
    }

   Clock { // this class is defined in QML (imports/TimeExample/Clock.qml)

        Time { // this class is defined in C++ (plugin.cpp)
            id: time
      }

        hours: time.hour
      minutes: time.minute

    }
}

TimeExampleTest.pro

folder_01.source = qml/TimeExampleTest

 folder_01.target = qml

 folder_02.source = /home/artem/Projects/Veedo/Test/build-plugins-Android_for_arm_GCC_4_6_Qt_5_1_0-Debug/imports/TimeExample

 folder_02.target = imports

 DEPLOYMENTFOLDERS = folder_01 folder_02

 QML_IMPORT_PATH = /home/artem/Projects/Veedo/Test/build-plugins-Android_for_arm_GCC_4_6_Qt_5_1_0-Debug/imports/TimeExample

 SOURCES += main.cpp

 include(qtquick2applicationviewer/qtquick2applicationviewer.pri)

 qtcAddDeployment()

 OTHER_FILES += \
    android/src/org/kde/necessitas/ministro/IMinistro.aidl \
    android/src/org/kde/necessitas/ministro/IMinistroCallback.aidl \
    android/src/org/qtproject/qt5/android/bindings/QtActivity.java \
    android/src/org/qtproject/qt5/android/bindings/QtApplication.java \
    android/AndroidManifest.xml \
    android/version.xml \
    android/res/values-ja/strings.xml \
    android/res/values-rs/strings.xml \
    android/res/values-zh-rTW/strings.xml \
    android/res/values-fa/strings.xml \
    android/res/values-ru/strings.xml \
    android/res/values-fr/strings.xml \
    android/res/values-ro/strings.xml \
    android/res/values-el/strings.xml \
    android/res/values-ms/strings.xml \
    android/res/values-nb/strings.xml \
    android/res/values-et/strings.xml \
    android/res/values-pl/strings.xml \
    android/res/values-pt-rBR/strings.xml \
    android/res/values-es/strings.xml \
    android/res/values-id/strings.xml \
    android/res/values-de/strings.xml \
    android/res/values-it/strings.xml \
    android/res/values-zh-rCN/strings.xml \
    android/res/values/strings.xml \
    android/res/values/libs.xml \
    android/res/layout/splash.xml \
    android/res/values-nl/strings.xml
4

3 に答える 3

0

QAbstractFileEngineHandler に関する Qt のソースを読んだ後、Qt に醜いものを見つけました。

  1. Qt は、カーネルが QAbstractFileEngineHandler である「qrc:」、「assets:」などの「searchpath」(URL ではない) を提供する何らかのメカニズムを実装しています。

  2. QAbstractFileEngineHandler は Qt5 でパブリックではなくなり、QFile、QFileInfo、QDir、QIcon、および QFile によって提供されるもの (QImage を含む) に加えて、Android アセットに特化した QAndroidAssetsFileEngineHandler に抽象を提供するだけです。

  3. そのため、QtQuick が何らかの URL に setSource されていることがわかっているため、SearchPath スキーマは QUrl と互換性がありません。

  4. [static] void QDir::setSearchPaths(const QString &prefix, const QStringList &searchPaths)これは、以下の Qt のドキュメントで見つけることができます。

    QDir::setSearchPaths("icons", QStringList(QDir::homePath() + "/images"));
    QDir::setSearchPaths("docs", QStringList(":/embeddedDocuments"));
    
    ...    
    QPixmap pixmap("icons:undo.png"); // will look for undo.png in QDir::homePath() + "/images"    
    QFile file("docs:design.odf"); // will look in the :/embeddedDocuments resource path
    

    QPixmap が QAbstractFileEngineHandler から画像をロードしなかったため、このスニペットが機能しないことがわかります。これは、Qt の文書化されていない変更である可能性があります。一方、searchpath に関する QtCore 単体テストは、QFile でのみテストされています。

さらに、void addResourceSearchPath(const QString &path)廃止されましたが、setSearchPath に欠陥があるため、これについてはかなり混乱しています。多分私は今QUrlを見てみるべきです:)

于 2016-05-05T17:51:11.157 に答える