开发者

QT Plugin with CMake

开发者 https://www.devze.com 2023-01-14 14:16 出处:网络
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 w

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: er开发者_如何学Cror: 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


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>


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

0

精彩评论

暂无评论...
验证码 换一张
取 消