2010-09-01 3 views
2

Привет всем,Плагин QT с CMake

Я пытаюсь внедрить плагин QT с CMake. Но эта директива «Q_EXPORT_PLUGIN2» останавливает мой класс от компиляции. Я могу скомпилировать плагин, если я прокомментировал это, но он не будет работать как плагин, если я это сделаю.

QT док говорит:

Q_EXPORT_PLUGIN2 (PluginName, ClassName) 

The value of PluginName should correspond to the TARGET specified in the plugin's project file

насчет в 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%] Building CXX object CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp .obj C:\svn\osaka3d\trunk\osaka3d\rinzo-platform\src\dlplugins\threedviewer\RzPlugin3 DViewerFactory.cpp:36: error: expected constructor, destructor, or type conversi on before '(' token make[2]: *** [CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp.obj] Error 1

make[1]: * [CMakeFiles/RzDL3DView.dir/all] Error 2 make: * [all] Error 2

+0

Что такое сообщение об ошибке? –

+0

К сожалению, сообщение об ошибке [12%] Строительство CXX объекта CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp .obj C: \ SVN \ osaka3d \ ствол \ osaka3d \ rinzo платформа \ SRC \ dlplugins \ threedviewer \ RzPlugin3 DViewerFactory.cpp: 36: ошибка: ожидается, конструктор, деструктор, или введите Конверси на перед '(' лексем марки [2]: *** [CMakeFiles/RzDL3DView.dir/RzPlugin3DViewerFactory.cpp.obj] Error 1 make [1]: *** [CMakeFiles/RzDL3DView.dir/all] Ошибка 2 make: *** [all] Ошибка 2 –

ответ

4

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

ПРОЕКТ (RinzoDLPlugin3DViewer CXX C)

Таким образом, теперь в CPP файл, его

Q_EXPORT_PLUGIN2(RinzoDLPlugin3DViewer , RzPlugin3DViewerFactory) 

и включал qpluginh.h

#include <qplugin.h> 
+0

Поскольку Qt5 Q_EXPORT_PLUGIN2 устарел. – ManuelSchneid3r

1

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

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

+0

Привет, Арнольд, я не использую файлы qmake и .pro. Я использую CMake как мою сборку Мне интересно, как это сделать с CMake. –

+0

О, я вижу. Я никогда не использовал CMake и предполагал, что он звонил qmake. –

+0

Я отредактировал свой ответ. Надеюсь, вы найдете решение. Если ни один из них не размещен здесь, пожалуйста, вернитесь и сообщите нам, если вы это выясните. –

Смежные вопросы