Как создавать плагины (Qt 5.2.0)
Я пытаюсь создать плагин (не для создателя Qt), я создал пустой проект и добавил следующие файлы: но я получаю следующие ошибки:
1. C: \ Qt \ Qt5.2.0 \ 5.2.0 \ mingw48_32 \ include \ QtCore \ qglobal.h: 666: erreur: неверное применение 'sizeof' к неполному типу 'QStaticAssertFailure' enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result)) sizeof(QStaticAssertFailure)} ^ 2. D:\MyFiles\Projects\QtProjects\pluginTest2\plugintest.cpp:9: erreur: ожидаемый инициализатор до 'PluginTest' QString PluginTest:: name () const ^
PluginTest2.pro (название проекта)
CONFIG += plugin
TARGET = PluginTest
CONFIG += plugin release
VERSION =1.0.0
TEMPLATE = lib
SOURCES += \
plugintest.cpp
HEADERS += \
Interface.h \
plugintest.h
interface.h
#ifndef INTERFACE_H
#define INTERFACE_H
#include <QString>
class Interface
{
public:
virtual QString name() const =0;
};
Q_DECLARE_INTERFACE(Interface,"interface /1.0.0")
#endif // INTERFACE_H
plugintest.h
#ifndef PLUGINTEST_H
#define PLUGINTEST_H
#include <QObject>
#include <QString>
#include<QtPlugin>
#include "Interface.h"
class PluginTest:public QObject,public Interface
{
Q_OBJECT
Q_INTERFACES(Interface)
public:
PluginTest();
QString name() const;
};
#endif // PLUGINTEST_H
plugintest.cpp
#include "plugintest.h"
PluginTest::PluginTest()
{
}
Q_EXPORT_PLUGIN2(PluginTest,PluginTest)
QString PluginTest::name() const
{
return "pluginTest";
}
1 ответ
Проблема в этой строке:
Q_EXPORT_PLUGIN2(PluginTest,PluginTest)
Это функция Qt 4, поэтому вам нужно будет либо удалить ее, либо поместить за макрос проверки версии следующим образом:
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
Q_EXPORT_PLUGIN2(PluginTest,PluginTest)
#endif
Для полноты, кажется, вы не указываете метаданные для плагина. Вам необходимо добавить это безоговорочно или условно с макросом проверки версии, если вы хотите поддерживать Qt 4 и Qt 5 следующим образом:
class PluginTest:public QObject,public Interface
{
Q_OBJECT
Q_INTERFACES(Interface)
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
Q_PLUGIN_METADATA(IID "your-string-here" FILE "file-here-but-can-be-empty")
#endif
...
};
Также обратите внимание, что вы добавляете элемент "плагин" CONFIG дважды в файл проекта.