Qake插件与CMake

Ash*_*iya 3 plugins qt qt4 cmake

问候所有,

我正在尝试使用CMake实现QT插件.但是这个"Q_EXPORT_PLUGIN2"指令阻止我的类编译.如果我对此进行了评论,我可以编译该插件,但如果我这样做,它将无法作为插件工作.

QT doc说:

Q_EXPORT_PLUGIN2 ( PluginName, ClassName ) 
Run Code Online (Sandbox Code Playgroud)

PluginName的值应该对应于插件的项目文件中指定的TARGET

在CMake案例中怎么样?"PluginName"的值应该是多少?

这是我的插件界面:

#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_ */
Run Code Online (Sandbox Code Playgroud)

并实施

#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)
Run Code Online (Sandbox Code Playgroud)

错误消息是:

[12%]构建CXX对象CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp .obj C:\ svn\osaka3d\trunk\osaka3d\rinzo-platform\src\dlplugins\threedviewer\RzPlugin3 DViewerFactory.cpp:36:错误:预期构造函数,''令牌make [2]:***[CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp.obj]错误1,析构函数或类型转换

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

Ash*_*iya 5

好的,我通过给出Cmake文件中指定的项目名称来解决问题.

项目(RinzoDLPlugin3DViewer CXX C)

所以,现在在CPP文件中

Q_EXPORT_PLUGIN2(RinzoDLPlugin3DViewer , RzPlugin3DViewerFactory)
Run Code Online (Sandbox Code Playgroud)

并包括qpluginh.h

#include <qplugin.h>
Run Code Online (Sandbox Code Playgroud)