C++ &引用;插件验证数据不匹配“;为qt5项目加载插件时
我有两个简单插件的原始(没有QtDesigner)Qt5项目,其中一个没有加载简洁的错误:“插件验证数据不匹配” 第一个插件的标题(加载和运行良好): 第二个,不加载:C++ &引用;插件验证数据不匹配“;为qt5项目加载插件时,c++,qt,plugins,qt5,C++,Qt,Plugins,Qt5,我有两个简单插件的原始(没有QtDesigner)Qt5项目,其中一个没有加载简洁的错误:“插件验证数据不匹配” 第一个插件的标题(加载和运行良好): 第二个,不加载: #ifndef __PIROGRONIAN__P2P2__CHAT_PLUGIN__H__ #define __PIROGRONIAN__P2P2__CHAT_PLUGIN__H__ #include <QtNetwork/QtNetwork> #include "Chat.h" #include "PluginI
#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
我不是专家,为qt5编写插件的描述非常粗略。但由于我找不到这些插件之间的任何主要区别,这个问题对我来说变得相当神秘。可能是Qt中的一个错误?我已经重建了好几次,以确保两者都是最新的
我正试图把整个代码放到网络的某个地方,但这需要一段时间。。。编辑:完成-此处打包为zip:不确定是否有帮助,但您的插件似乎包含无效元数据。下面是设置错误消息的代码 您可以使用Qt的调试版本,并在该函数中设置断点。这将为您提供加载插件时发生故障的确切线路
可能您的元数据中有错误?将环境变量QT_DEBUG_PLUGINS设置为非零。。重新运行你的程序,在这里发布错误消息。已经完成了,但是没有关于第二个插件有什么问题的消息,只是关于加载的插件。你是说输出中甚至没有提到第二个插件?这是不可能的。当设置此变量时,成功加载的插件将被记录到控制台,而失败的加载尝试更是如此。如果什么都没有,你的插件就找不到了。但是你在这里:[。插件名是libChatPlugin.so,几乎是最后一个。正如你所看到的,没有更多关于它的内容……:(顺便说一句……我在编写插件时从未尝试过的一件事:对多个插件使用同一个接口。提交引用无效。过时的链接?
#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
#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