问候所有人,
我正在尝试使用CMake实现QT插件。但是这个“Q_EXPORT_PLUGIN2”指令阻止我的类编译。如果我对此进行评论,我可以编译该插件,但如果我这样做,它将无法作为插件工作。
QT doc说:
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 \干线\ osaka3d \ rinzo平台的\ 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
答案 0 :(得分:5)
好的,我通过提供Cmake文件中指定的项目名称来解决问题。
PROJECT(RinzoDLPlugin3DViewer CXX C)
所以,现在在CPP文件中
Q_EXPORT_PLUGIN2(RinzoDLPlugin3DViewer , RzPlugin3DViewerFactory)
并包含qpluginh.h
#include <qplugin.h>
答案 1 :(得分:1)
我认为宏应该是Q_EXPORT_PLUGIN2(pnp_rzplugin3dviewerfactory, RzPlugin3DViewerFactory)
或您在.pro
文件中列为目标名称的任何内容。事实上,“pnp”部分代表“Plug&amp; Paint”,这是用于编写插件的Qt演示程序:)
修改强> 由于我误解了CMake的工作原理,因此这些信息与OP无关。我确实做了一个快速搜索,然后讨论了Qt,插件和CMake。我希望那里有一些有用的信息。 http://lists.trolltech.com/qt-interest/2007-05/msg00506.html