qt - 如何在另一个应用程序中使用 QT QML C++ 插件?
问题描述
我正在尝试围绕 QML 插件进行思考,我希望有人可以向我解释,因为我似乎遗漏了一些东西。
所以我继续创建了一个 Qt Quick 2 扩展插件。我有一个简单的源文件,我对 QQmlExtensionPlugin 类进行了子类化,并使用 qmlRegisterType 注册了新类型。我已经构建了这个项目,它给了我一个 DLL(我在 Windows 7 上,并使用 QT 5.13)。据我了解,我现在应该能够将此 DLL 和 qmldir 文件放入一个新项目中,并且我应该能够从通过 qmldir 文件公开的 DLL 加载 QML。
不幸的是,当我这样做时,它不起作用。我在网上看到的所有示例都显示了一个导入插件 qml 的 qml 文件,但是每次我尝试这样做时,导入都不起作用并给我一个“找不到 QML 模块”错误。
所以我的问题是:我如何实际使用另一个项目中的 DLL 和 qmldir 文件将 QML 从 DLL 公开到新项目?
解决方案
您似乎缺少 root QML import path。
默认的根导入路径是%QTDIR%/qml
,您可以简单地将插件模块复制并粘贴到此文件夹中,以便 QML 引擎可以找到并加载它。
或者更常见的做法,使用QQmlEngine::addImportPath()
QQmlEngine engine;
engine.addImportPath(qApp->applicationDirPath() + "/qml");
请注意,您应该始终使用Module (Namespace) Imports
来导入您的 C++ 插件模块:
import My.CppModule 1.0
用于Directory Imports
导入 C++ 插件模块当前是未定义行为:
import "My/CppModule" // Might fail
推荐阅读
- python - `firebase-admin` ModuleNotFound 导入
- c# - 本地(非网络)计算机上的 SQL Server Express 上的错误 26
- wolkenkit - 如何在 wolkenkit 中实现重复性任务?
- java - Spring Oauth 获取当前用户
- jaxb - 使用默认包名和 XSD 命名空间从 XSD 生成 Java 类
- c# - 从 C# 应用程序执行 MySql 存储过程的最低要求权限
- python - 在 ngram 索引中快速搜索
- python-3.x - 如何将这些行压缩为单个 return 语句?
- c# - 如何在 ExecuteInEditMode 中删除 Unity 中的对象
- asterisk - 用 ARI 替换拨号方案以实现“动态”入站分机