[Qt-qml] Plugin example [was: Re: A simple, complete example of QML onvoking C++?]

Peter Matuchniak pmatuchniak at imsco-us.com
Wed Apr 14 18:35:29 CEST 2010


Hello Matthias

Thanks for sharing your example -- this is exactly the kind of sample needed :-)

A few points:

- in the QML file, don't we need to add a line to refer to the shared object, i.e. something like this: "import NativeBackend"

- I get this runtime error (presumably because of the missing import?)
  file:///.../button/Button.qml:6:5: Type NativeBackend unavailable
  NativeBackend { id: nativeBackend; }

- during my initial build attempt, there seemed to be an endless loop of messages saying:
  "button.pro has a future date"
  This is probably because you are in a later timezone than me?
  Anyway, I got around this by re-saving each of the files with my local time and all was well after that

Kind regards
Peter



-----Original Message-----
From: qt-qml-bounces at trolltech.com [mailto:qt-qml-bounces at trolltech.com] On Behalf Of Matthias Ettrich
Sent: Wednesday, April 14, 2010 7:08 AM
To: qt-qml at trolltech.com
Subject: [Qt-qml] Plugin example [was: Re: A simple,complete example of QML onvoking C++?]

Hi,

attached is a small example button.zip which demonstrates how to create a C++ plugin which can be used fom qml. The plugin implements a native type called NativeBackend which implements a C++ function called nativeFunction().

An instance of NativeBackend is instantiated declaratively in Button.qml.

Unzip, cd to button, call qmake, make and run it with qml Button.qml. Clicking on the text label will change the text to the return value of the native function.

The file qmldir has to live in the same directory as Button.qml. The engine parses it automatically when loading Button.qml. The files contains the single line "plugin nativebackend lib" which makes the engine expect a plugin binary in the lib subdirectory.

If you run qml with QML_IMPORT_TRACE=1 you will also get debug output from the import loading mechanism:

~/tmp/button$ QML_IMPORT_TRACE=1 qml Button.qml QDeclarativeEngine::addImportPath "/home/ettrich/dev/qt-qml/bin"
QDeclarativeEngine::addToImport 0xeffa70 "." -1.-1 File as ""
QDeclarativeEngine::add: loaded "/home/ettrich/tmp/button/qmldir"
QDeclarativeEngine::importPlugin ".home.ettrich.tmp.button" from "/home/ettrich/tmp/button/lib/libnativebackend.so"
QDeclarativeEngine::addToImport 0xeffa70 "Qt" 4.6 Library as ""
QDeclarativeEngine::resolveType "Rectangle" = "QDeclarativeRectangle"
QDeclarativeEngine::resolveType "NativeBackend" = "NativeBackend"
QDeclarativeEngine::resolveType "Text" = "QDeclarativeText"
QDeclarativeEngine::resolveType "MouseArea" = "QDeclarativeMouseArea"
Wall startup time: 7


Matthias



---------------------------------------------------------------------------
This email and any files transmitted with it are confidential & proprietary to Systems and
Software Enterprises, Inc. (dba IMS). This information is intended solely for the use of
the individual or entity to which it is addressed. Access or transmittal of the information
contained in this e-mail, in full or in part, to any other organization or persons is not
authorized.
---------------------------------------------------------------------------




More information about the Qt-qml mailing list