使用CMake构建QT插件

5

大家好,

我正在尝试使用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


抱歉,错误信息为[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] 错误1make [1]:*** [CMakeFiles / RzDL3DView.dir / all] 错误2 make:*** [all] 错误2 - Ashika Umanga Umagiliya
2个回答

5

好的,我通过在Cmake文件中指定项目名称来解决了问题。

PROJECT (RinzoDLPlugin3DViewer CXX C)

现在,在CPP文件中是这样的

Q_EXPORT_PLUGIN2(RinzoDLPlugin3DViewer , RzPlugin3DViewerFactory)

并包含了qpluginh.h

#include <qplugin.h>

自从Qt5中,Q_EXPORT_PLUGIN2已经被弃用。 - ManuelSchneid3r

1

我认为宏应该是Q_EXPORT_PLUGIN2(pnp_rzplugin3dviewerfactory, RzPlugin3DViewerFactory)或者你在.pro文件中列出的目标名称。实际上,“pnp”部分代表“Plug & Paint”,这是用于编写插件的Qt演示程序 :)

编辑: 由于我误解了CMake的工作方式,因此这些信息对OP并不真正相关。但是,我进行了快速搜索,并找到了关于Qt、插件和CMake的讨论。希望那里有一些有用的信息。 http://lists.trolltech.com/qt-interest/2007-05/msg00506.html


嗨 Arnold,我不使用 qmake 和 .pro 文件。我使用 CMake 作为我的构建系统。我想知道如何在 CMake 中处理这个问题。 - Ashika Umanga Umagiliya
哦,我明白了。我从未使用过CMake,并且一直以为它在调用qmake。 - Arnold Spence
我已经编辑了我的回答。希望你能找到解决方案。如果这里没有发布任何解决方案,请回来告诉我们你是否解决了问题。 - Arnold Spence
嗨,Arnold,那个问题我搞定了。我发布了答案。 - Ashika Umanga Umagiliya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接