大家好,
我正在尝试使用CMake实现QT插件。但是,这个"Q_EXPORT_PLUGIN2"指令阻止了我的类编译。如果我注释掉它,我可以编译插件,但它将无法作为插件工作。
QT文档表示:
Q_EXPORT_PLUGIN2 ( PluginName, ClassName )
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_ */
实现和执行
#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)
错误信息如下:
[ 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] Error 1
make[1]: * [CMakeFiles/RzDL3DView.dir/all] Error 2 make: * [all] Error 2