如何创建插件(Qt 5.2.0)

时间:2014-03-14 01:31:37

标签: c++ qt plugins qtplugin

我正在尝试创建一个插件(不适用于Qt创建者), 我创建了一个空项目并添加了以下文件: 但是我收到了以下错误:

1。 C:\ Qt \ Qt5.2.0 \ 5.2.0 \ mingw48_32 \ include \ QtCore \ qglobal.h:666:erreur:'sizeof'无效应用于不完整类型'QStaticAssertFailure'枚举{Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result,COUNTER)= 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 个答案:

答案 0 :(得分:6)

问题在于这一行:

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项目。