【发布时间】:2015-10-30 20:58:14
【问题描述】:
我已经构建了一个静态 Qt 库,并希望使用它来部署我的应用程序和一个独立的 exe。经过一天的努力,我知道qtquick插件不能静态包含到exe中。
我需要将qml文件夹中的一些文件夹复制到我的exe目录中,让exe可以显示GUI。
所以我想知道我的exe需要哪个文件,我一一删除了这些文件夹中的文件以使其知道。真正需要的文件只是一个plugins.QMLTYPES 文件和一个qmldir 文件。
然后我发现QQmlApplicationEngine的导入路径可以更改,我输出QQmlApplicationEngine.importPathList(),其中一个路径就是Qt安装路径中的qml文件夹。 所以我认为这是Qt获取plugins.QMLTYPES文件和qmldir文件的搜索路径的地方。
如果我认为是正确的,我可以将我需要的文件夹复制到qrc 文件中并使用QQmlApplicationEngine.addImportPath("qrc:/foldersIwant") 让 exe 可以在运行时导入它需要的内容。而且因为qrc被编译成exe,我可以摆脱那些文件夹,让我的exe独立。
但是在我的代码中执行此操作后,即使QQmlApplicationEngine.importPathList() 的输出具有我放入的路径,应用程序仍然找不到它需要的文件,并且我还根据Load qmldir from QRC file 检查了我的路径。
代码如下:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.addImportPath(QStringLiteral("qrc:/import/qtquick/"));
qDebug()<<engine.importPathList();
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
return app.exec();
}
这是我的 qrc 文件的一部分
我的演绎有什么问题吗?
进一步研究:
我添加了
engine.addImportPath(QDir::currentPath() + QDir::separator() + "custom");
并将所有文件夹移动到custom文件夹中,它可以成功运行。而没有此行的exe不能与custom文件夹一起运行。所以我想知道“搜索”行为不能应用于qrc 文件?
【问题讨论】: