Как создавать плагины (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 дважды в файл проекта.

Другие вопросы по тегам