Плагин QT с CMake - PullRequest
       23

Плагин QT с CMake

3 голосов
/ 01 сентября 2010

Приветствую всех,

Я пытаюсь реализовать плагин QT с CMake.Но эта директива 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.: ошибка: ожидаемый конструктор, деструктор или тип разговора до '(' токен make [2]: *** [CMakeFiles / RzDL3DView.dir / RzPlugin3DViewerFactory.cpp.obj] Ошибка 1

make [1]: * [CMakeFiles / RzDL3DView.dir / all] Ошибка 2: * [все] Ошибка 2

Ответы [ 2 ]

5 голосов
/ 01 сентября 2010

Хорошо, я исправил проблему, указав имя проекта, указанное в файле Cmake.

PROJECT (RinzoDLPlugin3DViewer CXX C)

Итак, теперь в файле CPP его

Q_EXPORT_PLUGIN2(RinzoDLPlugin3DViewer , RzPlugin3DViewerFactory)

и включены qpluginh.h

#include <qplugin.h>
1 голос
/ 01 сентября 2010

Я думаю, что макрос должен быть Q_EXPORT_PLUGIN2(pnp_rzplugin3dviewerfactory, RzPlugin3DViewerFactory) или что-то, что вы указали как имя цели в файле .pro. Фактически, часть «pnp» означает «Plug & Paint», которая является демонстрационной программой Qt для написания плагинов:)

Edit: Так как я неправильно понял, как работает CMake, эта информация на самом деле не имеет отношения к OP. Однако я сделал быстрый поиск и поднял обсуждение Qt, плагинов и CMake. Я надеюсь, что там есть полезная информация. http://lists.trolltech.com/qt-interest/2007-05/msg00506.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...