2016-12-25 183 views
2

据我所知,qml文件可以从本地目录路径加载,也可以捆绑在qrc文件中并使用qrc:/ URI加载。在调试阶段,更改本地qml文件不需要重新编译qrc文件并将其与主要可执行文件链接在一起,这是用于尝试和错误微调的快速过程。但在部署阶段,应将qml文件作为qrc文件捆绑在一起并链接到主要的C++ Qt应用程序。当你想要单个可执行文件时,这是一个很好的做法,然而编译qrc文件并重新链接它对于大型项目来说是非常耗时的。有什么办法可以切换到qrc或本地目录吗?例如在调试和发布模式?在qrc和qml文件的本地路径之间切换

项目中有许多qml组件,所有这些都是由URI的qrc:/componenentname.qml在另一个qml文件中创建的。

那么有什么办法在调试和发布模式下交换这两个状态,并保持qml文件没有重复的变化?

回答

5

QML中的所有URL(如果未全部指定)与当前文件相关。

E.g.如果一个QML文件中有这样的

Image { 
    source: "images/foo.png" 
} 

那么内容的图像的完整URL是在运行时根据QML文件本身的基础URL构建。

I.e.如果QML文件本身是qrc://main.qml,那么得到的路径是qrc://images/foo.png,如果QML文件本身是file:///path/to/your/project/main.qml那么结果图像源是file:///path/to/your/project/image/foo.png

因此,如果您在QML中的使用情况中保留相对的URL,则可以在加载主QML文件时简单地在资源文件和本地文件之间切换。

QUrl mainFile = localMode ? QUrl::fromLocalFile("main.qml") : QUrl("qrc://main.qml") 

QQuickView view; 
view.setSource(mainFile);