rde*_*sia 11 qt qt-creator qml
如果我在qml.qrc文件下的不同文件夹中有一堆资源(图像,字体等),有没有办法在Qt Creator中组织它?
例如,如果我在qml.qrc文件中有以下内容:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>pages/MainPage.qml</file>
<file>pages/NewContactPage.qml</file>
<file>images/plus.png</file>
<file>images/minus.png</file>
<file>images/exit.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
它将在Qt Creator中显示为一个长列表,如下所示:
Resources
qml.qrc
/
main.qml
pages/MainPage.qml
pages/NewContactPage.qml
images/plus.png
images/minus.png
images/exit.png
Run Code Online (Sandbox Code Playgroud)
由于这个列表在项目的持续时间内可能会非常长,如果这些列表更好地组织并分成像我们目录中的文件夹那样会很好.有任何想法吗?
小智 5
如果您想使用 qrc 文件但不喜欢像“images/icons/images/icons/icon.png/”这样的路径,请使用此处描述的别名
<qresource prefix="/images">
<file alias="cut.png">images/cut.png</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)
使用别名,您可以通过整齐地书写/images/cut-img.png
而不是使用您的文件/images/images/cut.png
我刚刚发现了一种很棒的方法.有什么奇怪的是没有其他人建议它,当它如此完全无足轻重.也许它在旧版本的Qt/Qt Creator中不起作用,但现在确实如此.
这里是:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>test/test.txt</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
该test
目录必须存在,并需要包含test.txt
.
无需<qresource>
使用不同的前缀创建单独的标签.不需要alias
属性.
这些文件在文件系统和项目浏览器中组织得很干净,您可以使用干净的路径从代码中访问它们:/test/test.txt
.
(此截图是一个包含一些额外文件的项目 - 忽略这些)
Bonus:您可以右键单击Qt Creator中项目资源管理器中的"test"文件夹并选择"Add new ...",这会将新创建的文件放在文件系统中的正确位置.不幸的是,它没有出现在项目浏览器的qrc子树中,只出现在单独的"其他文件"子树中.您需要在项目资源管理器中右键单击"qrc.qml",然后选择"添加现有文件"以使文件显示在qrc子树中.所以它有点儿麻烦/凌乱但是当你学会如何使用它时,它是可行的.
奖励2:您可以导入(添加)现有文件/目录(驻留在qrc文件的任何(子)子目录中)并生成正确的XML语法,从而在项目资源管理器中生成正确的树结构.
我认为不起作用:
File -> New file or project
(或Ctrl-N)从Qt Creator创建文件.这不允许您将文件放在文件系统中的任意目录中,仅在根项目目录中.Ctrl+Shift+F
)中.编辑:我刚注意到OP正在做我的建议.在这种情况下,他可能正在使用较旧的Qt Creator版本.我的是4.1.0.
实际上,我强烈建议将非.qml
资产完全放在另一个资源文件中,因为大文件会缩短应用程序的构建时间。即使对qml源进行微小的更改,也会导致整个资源文件的重新编译。如果资产位于其他资源文件中,则不会连续重新编译它们。
除了显着缩短构建时间之外,这还将有效地实现组织。
来自 Qt 文档:Qt 资源系统
默认情况下,可以在应用程序中使用与源树中相同的文件名(使用 :/ 前缀)或通过带有 qrc 方案的 URL 来访问资源。
还可以使用 qresource 标记的 prefix 属性为 .qrc 文件中的所有文件指定路径前缀:
这个例子展示了如何做到这一点:
<RCC>
<qresource prefix="/pages">
<file >pages/MainPage.qml</file>
</qresource>
<qresource prefix="/images">
<file >images/plus.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)