加载qt5项目的插件时"插件验证数据不匹配"

pir*_*ian 7 c++ plugins qt qt5

我有两个简单插件的原始(没有QtDesigner)Qt5项目,其中一个没有加载简洁错误:"插件验证数据不匹配".

第一个插件的标题(加载并运行良好):

#ifndef __PIROGRONIAN__P2P2__GUI_PLUGIN__H__
#define __PIROGRONIAN__P2P2__GUI_PLUGIN__H__

#include "QtCore/QtCore"
#include "PluginInterface.h"

namespace P2P2 {

    class GuiPlugin : public QObject, public PluginInterface {
        Q_OBJECT
        Q_PLUGIN_METADATA(IID "Pirogronian.P2P2.GuiPlugin")
        Q_INTERFACES(P2P2::PluginInterface)

    public:
        bool init(CoreServer *);
        bool receiveObject(Object*);
        int channelType();
    };
};

#endif
Run Code Online (Sandbox Code Playgroud)

第二个,不加载:

#ifndef __PIROGRONIAN__P2P2__CHAT_PLUGIN__H__
#define __PIROGRONIAN__P2P2__CHAT_PLUGIN__H__

#include <QtNetwork/QtNetwork>
#include "Chat.h"
#include "PluginInterface.h"

namespace P2P2 {

    class ChatPlugin : public QObject, public PluginInterface {
        Q_OBJECT
        Q_PLUGIN_METADATA(IID "Pirogronian.P2P2.ChatPlugin")
        Q_INTERFACES(P2P2::PluginInterface)

        CoreServer *_server;
        QHash<Channel *, Chat *> _chats;

    public:
        virtual bool init(CoreServer *);
        virtual bool receiveObject(Object *);
        virtual int channelType();
    };

};

//Q_DECLARE_METATYPE(QPointer<P2P2::ChatPlugin>)

#endif
Run Code Online (Sandbox Code Playgroud)

这是PluginInterface头:

#ifndef __PIROGRONIAN__P2P2__PLUGIN_INTERFACE__H__
#define __PIROGRONIAN__P2P2__PLUGIN_INTERFACE__H__

#include "CoreServer.h"

namespace P2P2 {

    class PluginInterface {
    public:
        virtual bool init(CoreServer *) = 0;
        virtual bool receiveObject(Object *) = 0;
        virtual int channelType() = 0;
    };

};

Q_DECLARE_INTERFACE(P2P2::PluginInterface, "Pirogronian/P2P2/PluginInterface/1.0")

#endif
Run Code Online (Sandbox Code Playgroud)

我不是专家,为qt5编写插件的描述非常轻松.但是由于我找不到这些插件之间的任何重大差异,问题对我来说变得相当神秘.Mayby在Qt的一个错误?我已经多次重建,以确保两者都是最新的.

我正在尝试把整个代码放到网上,但它需要一段时间...编辑:完成 - 打包为zip:http://uploaduj.net/D74c2f/v0-1-pure-zip/

Kam*_*mek 1

不确定它是否有帮助,但似乎您的插件具有无效的元数据。这是设置错误消息的代码http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/plugin/qlibrary.cpp#n303

您可以使用 Qt 的调试版本并在该函数中设置断点。这将为您提供加载插件时失败的确切行。

也许您的元数据有错误?