2014-03-14 60 views
1

我試圖創建一個插件(不適用於Qt創建器), 我創建了一個空項目並添加了以下文件: 但我收到以下錯誤:如何創建插件(Qt 5.2.0)

1. C:\ Qt的\ Qt5.2.0 \ 5.2.0 \ mingw48_32 \包括\ QtCore \ qglobal.h中:666:ERREUR: '的sizeof' 不完全型 'QStaticAssertFailure' 枚舉的無效的應用程序{Q_STATIC_ASSERT_PRIVATE_JOIN( 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"; 
} 

回答

5

的問題是這一行:

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 

    ... 
}; 

此外,請注意你追加的「插件」配置項中兩次你的項目文件。

+0

問題解決了,非常感謝 –

+0

請問您是如何將此功能添加到Qt Designer中的?我可以編譯你的微不足道的例子,得到一個.so文件,但是Designer沒有看到它。你做了什麼才能真正把它帶入Designer? – DiBosco