views:

89

answers:

2

Greetings all,

I am trying to implement a QT Plugin with CMake. But this "Q_EXPORT_PLUGIN2" directive stops my class from compiling. I can compile the plugin if I commented this out,but it won't work as a plugin if I do so.

QT doc says:

Q_EXPORT_PLUGIN2 ( PluginName, ClassName ) 

The value of PluginName should correspond to the TARGET specified in the plugin's project file

What about in CMake case? What should be the value for 'PluginName'?

Here is my Plugin Interface :

#ifndef RZPLUGIN3DVIEWERFACTORY_H_
#define RZPLUGIN3DVIEWERFACTORY_H_
#include <QObject>
#include "plugin/IRzPluginFactory.h"



class RzPlugin3DViewerFactory :public QObject,public IRzPluginFactory{
      Q_OBJECT
      Q_INTERFACES(IRzPluginFactory)
private:
    QString uid;
public:
    RzPlugin3DViewerFactory();
    virtual ~RzPlugin3DViewerFactory();

    IRzPlugin* createPluginInstance();
    IRzPluginContext* createPluginContextInstance();
    QString & getPluginUID();
};

#endif /* RZPLUGIN3DVIEWERFACTORY_H_ */

And implementation

#include "RzPlugin3DViewerFactory.h"
#include "RzPlugin3DViewer.h"


RzPlugin3DViewerFactory::RzPlugin3DViewerFactory() {
    uid.append("RzPlugin3DView");

}

RzPlugin3DViewerFactory::~RzPlugin3DViewerFactory() {
    // TODO Auto-generated destructor stub
}
IRzPlugin* RzPlugin3DViewerFactory::createPluginInstance(){
    RzPlugin3DViewer *p=new RzPlugin3DViewer;
    return p;
}

IRzPluginContext* RzPlugin3DViewerFactory::createPluginContextInstance()
{
 return NULL;
}

QString & RzPlugin3DViewerFactory::getPluginUID()
{
    return uid;
}

Q_EXPORT_PLUGIN2(pnp_extrafilters, RzPlugin3DViewerFactory)

Error Message is :

[ 12%] Building CXX object CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp .obj C:\svn\osaka3d\trunk\osaka3d\rinzo-platform\src\dlplugins\threedviewer\RzPlugin3 DViewerFactory.cpp:36: error: expected constructor, destructor, or type conversi on before '(' token make[2]: * [CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp.obj] Error 1

make[1]: * [CMakeFiles/RzDL3DView.dir/all] Error 2 make: * [all] Error 2

+1  A: 

I think the macro should be Q_EXPORT_PLUGIN2(pnp_rzplugin3dviewerfactory, RzPlugin3DViewerFactory) or whatever you have listed as the target name in the .pro file. In fact, the "pnp" part stands for "Plug & Paint" which is the Qt demo program for writing plugins :)

Edit: Since I misunderstood how CMake works, this information isn't really relevant to the OP. I did do a quick search however and turned up this discussion of Qt, plugins and CMake. I hope there is some useful info there. http://lists.trolltech.com/qt-interest/2007-05/msg00506.html

Arnold Spence
Hi Arnold,I dont use qmake and .pro files. I use CMake as my build system. I wonder how to deal this with CMake.
umanga
Oh I see. I never used CMake and was assuming that it was calling qmake.
Arnold Spence
I've edited my answer. Hopefully you will find a solution. If none are posted here, please come back and let us know if you figure it out.
Arnold Spence
hi Arnold,thats.I figured out how to fix it.I posted the anwer.Thanks
umanga
+2  A: 

Ok , I fixed the problem by giving the project name specified in Cmake file.

PROJECT (RinzoDLPlugin3DViewer CXX C)

So,now in CPP file its

Q_EXPORT_PLUGIN2(RinzoDLPlugin3DViewer , RzPlugin3DViewerFactory)

and included qpluginh.h

#include <qplugin.h>
umanga