如何在Qt Creator中的qml.qrc文件夹下组织文件?

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


Ste*_*nov 5

我刚刚发现了一种很棒的方法.有什么奇怪的是没有其他人建议它,当它如此完全无足轻重.也许它在旧版本的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创建文件.这不允许您将文件放在文件系统中的任意目录中,仅在根项目目录中.
  • 您放入子目录中的文件不包含在Qt Creator的项目范围搜索(Ctrl+Shift+F)中.

编辑:我刚注意到OP正在做我的建议.在这种情况下,他可能正在使用较旧的Qt Creator版本.我的是4.1.0.


dte*_*ech 5

实际上,我强烈建议将非.qml资产完全放在另一个资源文件中,因为大文件会缩短应用程序的构建时间。即使对qml源进行微小的更改,也会导致整个资源文件的重新编译。如果资产位于其他资源文件中,则不会连续重新编译它们。

除了显着缩短构建时间之外,这还将有效地实现组织。


Ali*_*rad 2

来自 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)

  • @ali-mofrad,这不会产生像 /pages/pages/MainPage.qml 和 /images/images/plus.png 这样的路径吗? (7认同)
  • 这对于 1 级文件夹组织来说很好,但是 - 如果我希望我的 QT 项目向我显示文件夹内文件夹内的文件夹,该怎么做?在google / qt官方网站上搜索,找不到任何提及!恼人的。 (2认同)