qt - 如何拆分嵌入在 DLL 中的 QML 文件?
解决方案
如果它是通过 *.qrc 嵌入的,那么它与标准的 windows/linux (.dll/.so) 资源格式不兼容。qrc 被编译为 xxx_qrc.cpp 文件并被链接器嵌入为带有静态初始化代码的 .obj 文件。即它只是二进制文件的一部分。您可以通过带有“qrc:/ . ” URL 的 QFile 访问 qrc 的“内容”。但为此,您必须加载嵌入在当前进程中的资源的 DLL,因为 qrc 与静态初始化(在 Windows 中也称为 DllMain)挂钩。就像是:
QLibrary lib("./library.dll");
if (!lib.load())
throw exception(lib.errorString().toStdString());
QFile resource(":/resource.qml");
if (!resource.open(QIODevice::ReadOnly))
throw exception(resource.errorString().toStdString());
resource.copy("./exported.qml");
要探索当前加载的虚拟 qrc 文件系统树,可以使用 QDir(":/")。我想从这里找出其余部分很容易。
当然 - 你必须知道你正在加载什么样的 DLL 到你的进程中,因为它们可能包含将在你调用 QLibrary::load 时执行的任意代码!
推荐阅读
- python - 无法从 json 文件中读取传递给 python 的字符串(必须是整数)
- r - 转换整数日期
- mysql - 将批量数据添加到mysql数据库
- javascript - 如何在滚动时平滑滚动到下一个目标元素
- javascript - 为什么我的 JS DOM 操作结果未定义且未更改 HTML?
- java - 春季框架中的bean自动装配
- vba - 更改 HTML 输入标记的值
- ios - 如何指定用于导入 .obj 文件的文件类型?
- html - bootstrap 4 carousel ignored, images stacked on top of eachother
- json - 使用 Watson Assistant 评估条件中的上下文变量