Sono stato creato un plug-in di test come libreria condivisa Qt5/QML utilizzando il progetto templete "Librerie/Qt Quick 2 Extension Plugin" in QtCreator. Il mio ambiente di sviluppo è linux con Qt-5.0.0 e QtCreator-2.6 (il dettaglio è append in fondo).Come utilizzare un plugin di estensione Qt Quick 2 su .qml con qmlscene (o qmlviewer5)
I file di origine (in sostanza): https://gist.github.com/4467883
I file di origine sono generati default senza alcuna modifica. Il nome del progetto è "senza titolo", l'uri è "com.mycompany.mycomponents" e il nome della classe dell'oggetto è "MyItem". I file sorgente in "/ tmp/untitled" come SRCDIR.
e costruirlo da file di libreria di output come "libuntitled.so", file "qmldir" e alcuni degli oggetti in "/ tmp/untitled-build" come DESTDIR.
$ ls /tmp/untitled-build
Makefile libuntitled.so moc_myitem.cpp
moc_myitem.o moc_untitled_plugin.cpp moc_untitled_plugin.o myitem.o
qmldir untitled_plugin.o
Ma, non posso utilizzare la libreria a "/tmp/test/test.qml" come sorgente QML test con qmlscene comando.
$ mkdir /tmp/test; cd /tmp/test
$ vim test.qml
"test.qml" (nella sostanza): https://gist.github.com/4474422
$ qmlscene test.qml
E 'sicuro, e QML_IMPORT_TRACE log è:
QQmlImportDatabase::addImportPath: "/usr/lib64/qt5/qml"
QQmlImportDatabase::addImportPath: "/usr/bin"
QQmlImports(file:///tmp/test/test.qml)::addImplicitImport
QQmlImports(file:///tmp/test/test.qml)::addLibraryImport: "QtQuick" 2.0 as ""
QQmlImports(file:///tmp/test/test.qml)::importExtension: loaded "/usr/lib64/qt5/qml/QtQuick.2/qmldir"
QQmlImportDatabase::importPlugin: "QtQuick" from "/usr/lib64/qt5/qml/QtQuick.2/libqtquick2plugin.so"
file:///tmp/test/test.qml:2 module "com.mycompany.mycomponents" is not installed
E cercare "-I" opzione:
$ qmlscene test.qml -I /tmp/untitled-build
Questo è fail anche. log è:
QQmlImportDatabase::addImportPath: "/usr/lib64/qt5/qml"
QQmlImportDatabase::addImportPath: "/usr/bin"
QQmlImportDatabase::addImportPath: "/tmp/untitled-build"
QQmlImports(file:///tmp/test/test.qml)::addImplicitImport
QQmlImports(file:///tmp/test/test.qml)::addLibraryImport: "QtQuick" 2.0 as ""
QQmlImports(file:///tmp/test/test.qml)::importExtension: loaded "/usr/lib64/qt5/qml/QtQuick.2/qmldir"
QQmlImportDatabase::importPlugin: "QtQuick" from "/usr/lib64/qt5/qml/QtQuick.2/libqtquick2plugin.so"
file:///tmp/test/test.qml:2 module "com.mycompany.mycomponents" is not installed
E provare con "/ tmp/test/qmldir":
$ vim /tmp/test/qmldir
"tmp/test/qmldir" (nella sostanza): https://gist.github.com/4474497
Ecco falliscono . log:
QQmlImportDatabase::addImportPath: "/usr/lib64/qt5/qml"
QQmlImportDatabase::addImportPath: "/usr/bin"
QQmlImports(file:///tmp/test/test.qml)::addImplicitImport
QQmlImports(file:///tmp/test/test.qml)::importExtension: loaded "/tmp/test/qmldir"
QQmlImportDatabase::importPlugin: ".tmp.test" from "/tmp/untitled-build/libuntitled.so"
Module '.tmp.test' does not contain a module identifier directive - it cannot be protected from external registrations.
QQmlImports(file:///tmp/test/test.qml)::addLibraryImport: "QtQuick" 2.0 as ""
QQmlImports(file:///tmp/test/test.qml)::importExtension: loaded "/usr/lib64/qt5/qml/QtQuick.2/qmldir"
QQmlImportDatabase::importPlugin: "QtQuick" from "/usr/lib64/qt5/qml/QtQuick.2/libqtquick2plugin.so"
file:///tmp/test/test.qml:2 module "com.mycompany.mycomponents" is not installed
Come utilizzare la libreria ("/ tmp/untitled-build/libuntitled.so") nel test .qml ("/ tmp/test.qml") con qmlscene (o qmlviewer5)?
Dettaglio dell'ambiente (basato su openSUSE-12.2):
$ uname -a
Linux LH-MAIN 3.4.11-2.16-desktop #1 SMP PREEMPT Wed Sep 26 17:05:00 UTC 2012 (259fc87) x86_64 x86_64 x86_64 GNU/Linux
$ g++ --version | head -n1
g++ (SUSE Linux) 4.7.1 20120723 [gcc-4_7-branch revision 189773]
$ qmake -v
QMake version 3.0
Using Qt version 5.0.0 in /usr/lib64
$ qtcreator -version 2>&1 >/dev/null | grep "^[^ ].*" | head -n1
Qt Creator 2.6.1 based on Qt 5.0.0
$ qmlviewer5 -v
Qml debugging is enabled. Only use this in a safe environment!
Qt QML Viewer version 5.0.0
Riferimenti:
- http://doc-snapshot.qt-project.org/5.0/qtcore/plugins-howto.html
- http://doc-snapshot.qt-project.org/5.0/qtcore/qtplugin.html
- http://qt-project.org/doc/qt-5.0/qtqml/qtqml-modules-qmldir.html
- http://qt-project.org/doc/qt-5.0/qtqml/examples-quick-tutorials-extending-chapter6-plugins.html
Grazie mille! I punti importanti sono (1) impostare la variabile di ambiente 'QML2_IMPORT_PATH' e (2) impostare la struttura ad albero della directory di importazione collegata al componente uri. Può funzionare sul mio ambiente. –