我使用Qt 5.3和调用
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
bool pluginLoaded = pluginLoader.isLoaded();
它给出了错误:(
// serverplugin.h
#ifndef SERVERPLUGIN_H
#define SERVERPLUGIN_H
#include <QObject>
#include <QtPlugin>
#include "acepos/aceclient/serverinterface.h"
#include <QThread>
#include "server.h"
class ServerPlugin : public QObject,
public ServerInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.AcePos.ServerInterface/1.1" FILE "serverplugin.json")
Q_INTERFACES(ServerInterface)
QThread *m_pServerThread;
Server *m_pServer;
public:
ServerPlugin():m_pServerThread(NULL), m_pServer(NULL){}
private slots:
//void handleServiceStartNotify();
public:
bool startServerService();
bool stopServerService();
};
#endif
// serverinterface.h
#ifndef SERVERINTERFACE_H
#define SERVERINTERFACE_H
#include <QtPlugin>
class ServerInterface
{
public:
virtual ~ServerInterface() { }
virtual bool startServerService() = 0;
virtual bool stopServerService() = 0;
};
#define ServerInterface_iid "org.qt-project.Qt.AcePos.ServerInterface/1.1"
Q_DECLARE_INTERFACE(ServerInterface, ServerInterface_iid)
#endif // SERVERINTERFACE_H
如果我在创建插件时遇到任何错误,请告诉我。
当我构建插件项目时,我能够看到生成的库文件。我正在为android qt项目做这个。调试时工作正常。我在开发期间对插件部分进行了更改。
答案 0 :(得分:3)
QPluginLoader
进行以下检查:
开发时有时会忘记使用正确的Qt配置重建插件,导致插件未加载。解决方案:使用正确的构建配置重建插件。
您还可以在应用程序的启动环境中设置QT_DEBUG_PLUGINS=1
,以获取有关插件加载的更详细的调试信息。
答案 1 :(得分:0)
昨天我偶然发现了这个问题,这就是我要做的事情: 请注意,我的插件和使用该插件的应用程序都处于调试模式并使用相同版本的Qt构建,因此这不是问题。问题是我忘记将以下行放在插件的主导出类中:
Q_PLUGIN_METADATA(IID "namespace.if.any.classname" FILE "package.json")
在此之后,我没有加载插件的问题。