Switching between qrc and local path for qml files
据我所知,qml文件可以从本地目录路径加载,也可以捆绑在qrc文件中,并使用qrc:/ URI加载。在调试阶段,更改本地qml文件不需要重新编译qrc文件并与主要可执行文件链接在一起,这是尝试和错误微调的快速过程。但是在部署阶段,应将qml文件作为qrc文件捆绑在一起,并链接到主要的C Qt应用程序。当您要有一个可执行文件时,这是个好习惯,但是对于大型项目,编译qrc文件并再次链接它是很耗时的。有什么办法可以切换到qrc或本地目录?例如在调试和发布模式下?
项目内部有许多qml组件,所有这些都是由URI创建的,例如另一个qml文件中的qrc:/componenentname.qml。
那么,有什么方法可以在调试和发布模式下交换这两种状态,并保持qml文件没有重复的更改?
QML中的所有URL(如果未完整指定)均相对于当前文件。
例如如果QML文件包含这样的内容
1 2 3 | Image { source:"images/foo.png" } |
然后基于QML文件本身的基本URL在运行时构造图像的完整URL。
即如果QML文件本身为
因此,如果您在QML中使URL在使用中保持相对性,则可以在加载主QML文件时在资源文件和本地文件之间切换。
1 2 3 4 | QUrl mainFile = localMode ? QUrl::fromLocalFile("main.qml") : QUrl("qrc://main.qml") QQuickView view; view.setSource(mainFile); |
很抱歉,以前的帖子,
我们要做的是使用Qts资源搜索路径。我们使用了PySide2,因此示例在python
中
1 2 3 4 5 6 7 8 9 10 11 | try: QDir.addSearchPath('search_path_name', 'path/to/root/resources') engine.load('search_path_name:/main.qml') except FileNotFoundError: try: import qml # compiled resources using pyside resource compiler QDir.addSearchPath('search_path_name', ':/') engine.load('qrc:///main.qml') except ModuleNotFoundError: pass |
从此时开始,将使用