将 Qt 4.8 转换为 5 QPluginLoader->instance 返回 null
Posted
技术标签:
【中文标题】将 Qt 4.8 转换为 5 QPluginLoader->instance 返回 null【英文标题】:Converting Qt 4.8 to 5 QPluginLoader->instance returns null 【发布时间】:2013-01-21 05:17:10 【问题描述】:我使用 QT 4.8.2 编写了一个应用程序。它确实动态加载不同的插件以为用户提供多种功能。 现在 Qt5 发布了,我想将我的项目转换为最新版本。
除了使用 QPluginLoader->instance() 加载插件外,我一切正常。在使用 Qt 4.8.2 时,它运行良好。
->errorString 说: “文件‘.../plugins/nlprod.dll’不是一个有效的Qt插件。”
这是我的代码:
插件加载器.cpp:
//"fileName" contains the name of the .dll
pluginLoader->setFileName(pluginsDir->absoluteFilePath(fileName));
//"a" contains the correct path + name of the .dll
QString a = pluginLoader->fileName();
//"plugin" is null and success "false"
QObject *plugin = pluginLoader->instance();
bool success = pluginLoader->isLoaded();
MyPlugin.h:
class NLPro : public QObject, IConnection
Q_OBJECT
Q_PLUGIN_METADATA(IID "NLPro" FILE "nlpro.json") // <- New since I've ported to Qt 5
Q_INTERFACES(IConnection)
...
我的插件.cpp: 我已删除以下内容:
Q_EXPORT_PLUGIN2(NLPro, NLPro);
我添加了一个包含以下内容的 .json 文件:
"Keys": [ "NLPro"]
【问题讨论】:
请记住,您使用 Qt 4 编译的插件不与 Qt 5 兼容。它们取决于版本。使用 Qt 5 编译插件是您唯一的选择。 【参考方案1】:OP 的解决方案。
已修复:
虽然
TARGET = $$qtLibraryTarget(nlpro)
在 Qt 4.8 中正常工作,我不得不将其更改为
TARGET = $$qtLibraryTarget(NLPro)
对于 Qt 5.0
【讨论】:
以上是关于将 Qt 4.8 转换为 5 QPluginLoader->instance 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间才能调试
如何在VS2012下静态构建Qt 4.8/5.2,使用静态MSVC运行时,支持Windows XP?
Qt 4.8,Visual Studio 2013 编译错误
我是win7 64位的系统,下载了Qt 5.2.1 for Windows 32-bit (MinGW 4.8, OpenGL, 634 MB)请安装过的大神