Create a plugins
-
that exaclly what i did - and i create alse qmldir file in the first project (as shown in the example)....
in this link : http://doc.qt.nokia.com/latest/plugins-howto.html
they say that the pro file of the 2nd project should be changed... -
I do not see anything in that document relating to qml plugins. Rather than this constant back and forth can you provide a zip file of your two projects that we can try to fix up for you please?
-
i can't post all my code. but this is the main classes:
1st project :
ngwidgetsplugin.h
@#include <QDeclarativeExtensionPlugin>
class NGWidgetsPlugin: public QDeclarativeExtensionPlugin
{
Q_OBJECT
public:
void registerTypes(const char *uri);
};@ngwidgetsplugin.cpp
@#include <QtDeclarative>
#include <QtPlugin>
//.....more includes for filesvoid NGWidgetsPlugin::registerTypes(const char *uri)
{
qmlRegisterType<OperandItem> (uri, 1, 0, "MYOperand");//.................
}
Q_EXPORT_PLUGIN2(NGWidgets, NGWidgetsPlugin)@
.pro
@QT += core gui
QT += declarative
QT += network#TARGET = NGWidgets
TEMPLATE = lib
CONFIG += qt plugin
DESTDIR = lib
OBJECTS_DIR = tmp
MOC_DIR = tmpSOURCES += ...
HEADERS += ...
OTHER_FILES += ...
@qmldir
@plugin NGWidgets lib@
2nd project - use the plugin
.pro
@QT += core gui
QT += declarative
QT += networkSOURCES += ...
HEADERS += ...
OTHER_FILES += ...@qmldir
@plugin NGWidgets C:/Qt/Projects/NGWidgets-build-desktop/debug @
app.qml
@import QtQuick 1.0
import NGWidgets 1.0Rectangle
{
MYOperand{...}
}@
i got the error : module "NGWidgets" is not installed
for line 2 -
Be also aware that you usually cannot mix release and debug code.
-
so how can i connect to the plugin, that locate in the debug dir?
-
I just wanted to point out that if you compile your application in debug mode you should compile your plugins in debug mode too (same goes for release builds).
However - have you tried to "trace the module import":http://developer.qt.nokia.com/doc/qt-4.7/qdeclarativedebugging.html?
EDIT: Are you sure that path in your qmldir file is correct? You instruct qmake to place your library in a "lib" directory but your path points to the "debug" directory. -As far as I have understood the documentation you do not need both - the qmldir and the import statement. You can omit one.-
-
yes, i give the path to the location of NGWidgets.dll , and this dll is locate in the debug dir of the plugin project and also in the lib directory (in 2 cases it's not recognize the "module")...
-
The .dll in your debug directory is most likely an outdated version, as all new versions are moved to the lib directory (as specified as DESTDIR in the .pro file). You are pointing to the wrong directory in your qmldir file.
Have you already tried tracing the module import?
-
ok - you right , i changed it to :
@plugin NGWidgets C:/Qt/Projects/NGWidgets-build-desktop/lib@
but still have the same problem -
Have you already tried tracing the module import?
-
this is the output:
QDeclarativeImportDatabase::addImportPath: "C:\QtSDK\Desktop\Qt\4.7.3\mingw\imports"
QDeclarativeImportDatabase::addImportPath: "C:/Qt/Projects/App-build-desktop/debug"
QDeclarativeImports(C:/Qt/Projects/App/app.qml)::addImport: "." -1.-1 File as ""
QDeclarativeImports(C:/Qt/Projects/App/app.qml)::addImport: "QtQuick" 1.0 Library as ""
QDeclarativeImports(C:/Qt/Projects/App/app.qml)::addImport: "NGWidgets" 1.0 Library as ""
C:/Qt/Projects/App/app.qml:3:1: module "NGWidgets" is not installed -
is this a good output?
-
Did you place your qmldir file "correctly":http://doc.trolltech.com/4.8-snapshot/qdeclarativemodules.html#installed-modules?
-
yes, this is in the main directory of the App project...
-
the dll islocate in the "C:\Qt\Projects\NGWidgets-build-desktop\lib"
and the qmldir file is in "C:\Qt\Projects\App" -
can someone post please code of 2 project (one plugin, and one qml application that use the plugin) , when the projects are not under the same build , and it work for him please.
-
Yup only takes 10 minutes! You can find the projects at:
"Project 1 (the QML plugin)":http://www.theharmers.co.uk/busyindicator.tar.gz
"Project 2 (the app using the plugin)":http://www.theharmers.co.uk/simpleqmlapp.tar.gzYou will need to alter the following things to make it work on your system:
In busyindicator.pro edit the line
@
target.path = $$(HOME)/local/lib
@
to a path of your choice.In the 2nd project edit the file simpleqmlapp/qml/simpleqmlapp/qmldir so that the path matches what you set in the .pro file above. By default it contains:
@
plugin zapbsqmlplugin /home/sean_harmer/local/lib
@With the above mods in place, just do:
@
qmake
make
make install
@in the busyindicator project. Followed by:
@
qmake
make
@in the simpleqmlapp project.
-
thank you for all your help. i will check this example :)