Qake插件与CMake

时间:2010-09-01 03:00:32

标签: qt plugins qt4 cmake

问候所有人,

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

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