QT中的资源文件的编写(qrc)

本文介绍如何在Qt项目中创建并使用.qrc资源文件,包括设置资源路径、配置pro文件及利用资源编辑器ActionEditor添加图标资源的过程。

 

1、建立*.qrc资源文件
     最近遇到一些项目都包含了 qrc 文件,这个是 Qt 的资源文件,如果在 pro 文件中不包含的话在编译的时候会提示找不到相应资源的错误。
     #mkdir images
     新建images文件夹,用来存放资源图片,这里存放Add.png图片,
     #touch mainwindow.qrc
     新建资源文件与images保存同一目录(一般程序是这么做的,我就这么做了),mainwindow.qrc文件的内容如下:
     <RCC>
     <qresource>
          <file>images/Add.png</file>
     </qresource>
     </RCC>
2、编辑工具条按钮(QT-4.6.3)
     a.打开资源编辑器Action Editor,选择要添加动作命令的名字(我加的是actionAdd),双击;
     b.为资源文件添加图标资源,选择 Icon: 选项的后面的带三个点的按钮,点击,进入一个对话框,点击左边的images 文件夹,在右边可以看到这个文件夹下的资源图标(到目前为止点击也是看不到的,原因看下一条 c 选项);
     c.打开资源管理器之前要修改 mainwindow.pro 的内容,在 SOURCES 选项的下面添加  RESOURCES += mainwindow.qrc   ,要不是看不到资源文件的,切记!(可参考下面我贴来的内容)
  
     下面说一下手动修改pro 和编写qrc 文件的方法。

我们直接在命令行下执行qmake –project -o < 文件名>.pro   命令,会生成< 文件名>.pro 文件,


下面是贴的别人的内容,仅供我自己参考

然后用文本编辑器打开这个文件:

######################################################################

# Automatically generated by qmake (2.01a) ??? ?? 18 14:13:48 2007

######################################################################

 

TEMPLATE = app

TARGET = test

DEPENDPATH += .

INCLUDEPATH += .

 

# Input

HEADERS += editor.h mainwindow.h

SOURCES += editor.cpp main.cpp mainwindow.cpp

RESOURCES = test.qrc// 添加这句 ,假设 qrc 的文件名为 test

然后编写 test.qrc 文件:

<!DOCTYPE RCC><RCC version="1.0">或者直接写上<RCC>就好了,不用写那么多

<qresource>

      <file>images/copy.png</file>

      <file>images/cut.png</file>

      <file>images/document.png</file>

      <file>images/icon.png</file>

      <file>images/new.png</file>

      <file>images/open.png</file>

      <file>images/paste.png</file>

      <file>images/save.png</file>

</qresource>

</RCC>

 

<think>我们正在处理如何在Qt资源文件(qrc)中创建和添加有层级的文件夹的问题。根据引用[1],我们知道在QtCreator中可以通过创建qrc文件并编辑它来管理资源。引用中提到了两种编辑方式:资源编辑器和文本编辑器。层级结构的文件夹在qrc文件中实际上是通过前缀(prefix)来模拟的。在资源管理器中,我们可以通过创建前缀(类似于文件夹)来组织资源文件。具体步骤如下:1.创建qrc文件(如果还没有):在QtCreator中,右击项目->添加新文件->选择“QtResourceFile”->输入文件名并创建。2.编辑qrc文件:我们可以使用资源编辑器(图形界面)或文本编辑器(手动编辑)来添加层级结构。a.使用资源编辑器:-在项目视图中右击qrc文件,选择“OpenWith”->“资源编辑器”。-在资源编辑器中,点击“添加前缀”按钮(或右击选择“添加前缀”),输入前缀名(例如:/images/backgrounds)。-然后选择这个前缀,点击“添加文件”或“添加目录”按钮来添加资源文件。注意:添加目录时,可以选择是否递归添加子目录。*注意:前缀中的斜杠表示层级,例如:/images/backgrounds表示在根目录下有images文件夹,其中包含backgrounds文件夹。b.使用文本编辑器(直接编辑XML内容):-在项目视图中右击qrc文件,选择“OpenWith”->“普通文本编辑器”。-qrc文件的基本结构是XML。例如:<RCC><qresourceprefix="/images"><file>backgrounds/blue.png</file></qresource></RCC>但是这样并没有创建多级前缀,而是将文件放在一个前缀下,并且文件路径中包含了子目录。如果我们想要多级前缀(即多个层级的虚拟文件夹),可以这样:<RCC><qresourceprefix="/"><file>images/backgrounds/blue.png</file></qresource></RCC>或者,如果我们想为不同层级设置不同的前缀,可以:<RCC><qresourceprefix="/images"><file>backgrounds/blue.png</file></qresource><qresourceprefix="/images/backgrounds"><file>pattern.png</file></qresource></RCC>但通常我们使用一个前缀,然后在文件路径中体现层级。更常见的做法是:<RCC><qresourceprefix="/"><file>images/backgrounds/blue.png</file><file>images/backgrounds/pattern.png</file><file>images/icons/home.png</file></qresource></RCC>这样,在资源系统中,我们就会看到:/images/backgrounds/blue.pngpattern.pngicons/home.png也就是说,在qrc文件中,通过文件路径的斜杠分隔,自然形成了层级结构。3.添加具有层级结构的文件夹:在资源编辑器中,我们可以通过以下步骤添加整个文件夹(包含子文件夹):-在资源编辑器中,先选择或创建一个前缀(比如前缀为`/`,即根目录)。-然后点击“添加目录”按钮,选择磁盘上的一个目录(例如:`images`目录,该目录下可能有子目录backgrounds和icons)。-在弹出的对话框中,选择“添加文件”选项,并勾选“递归添加目录”(这样会包含子目录)和“添加空目录”(如果需要的话)。-确定后,资源编辑器会将整个目录结构添加到qrc文件中。在文本编辑器中,我们可以手动编写文件路径,或者使用通配符来添加整个目录(但注意,通配符在qrc文件中是允许的):<RCC><qresourceprefix="/"><file>images/backgrounds/*.png</file><file>images/icons/*.png</file></qresource></RCC>但是这样不会保留子目录结构,而是将匹配的文件都放在同一个前缀下。为了保留子目录结构,我们可以使用:<RCC><qresourceprefix="/"><file>images/backgrounds/</file><!--这样不行,不能添加整个目录--></qresource></RCC>实际上,qrc文件不支持直接添加整个目录(而不指定具体文件),但我们可以使用通配符来添加目录下的所有文件(包括子目录):<RCC><qresourceprefix="/"><file>images/*</file><!--这样会添加images下的所有文件,但不包括子目录--></qresource></RCC>为了包括子目录,我们需要使用递归通配符(**):<RCC><qresourceprefix="/"><file>images/**/*.png</file><!--递归添加images目录下所有子目录中的png文件--></qresource></RCC>这样,在资源系统中,将保留原来的目录结构。总结:在qrc文件中创建层级结构有两种主要方式:-通过文件路径中的斜杠来自然形成层级(例如:`images/backgrounds/blue.png`)。-通过多个前缀来创建不同的层级(但通常不推荐用多个前缀来模拟多级目录,因为这样管理起来可能更复杂)。使用资源编辑器添加整个目录(包括子目录)时,会自动保留目录结构。手动编辑时,可以使用通配符(特别是递归通配符)来添加整个目录树。注意:在代码中访问资源时,路径是带前缀的。例如,如果文件在qrc中显示为`:/images/backgrounds/blue.png`,则我们可以使用这个路径来加载。引用[2]提到了将qrc文件转换为Python源文件的命令(pyrcc5),这在使用PyQt时是必要的步骤。转换后,资源文件会被编译进Python模块中,访问方式不变。引用[3]提到了Android开发中资源文件的处理,但我们的问题集中在Qt资源文件上,因此可以忽略。因此,具体操作步骤(使用资源编辑器):1.创建qrc文件(如果还没有)。2.打开资源编辑器(在qrc文件上右击选择“OpenWith”->“资源编辑器”)。3.添加一个前缀(比如`/`,根前缀,也可以自定义)。4.点击“添加目录”,选择磁盘上的文件夹(例如:`my_resources`),勾选“递归添加目录”和“添加空目录”(如果需要),然后确定。5.保存qrc文件。这样,在资源编辑器中,你会看到以`my_resources`为根的目录结构(在qrc文件中,这些文件会以相对路径的形式出现,并且保留目录结构)。如果使用文本编辑器,可以这样写(假设我们有一个`my_resources`目录,位于项目目录中,里面包含多级子目录和文件):<RCC><qresourceprefix="/"><file>my_resources/images/backgrounds/blue.png</file><file>my_resources/images/backgrounds/pattern.png</file><!--或者使用通配符--><file>my_resources/images/**/*</file></qresource></RCC>但是手动列出每个文件很麻烦,所以通常使用资源编辑器添加整个目录,或者使用通配符(注意通配符的递归使用)。注意:使用通配符时,Qt在编译资源时会将匹配的文件都添加进来,所以确保通配符不会匹配到不需要的文件。最后,记得在代码中访问资源时使用正确的路径(如:`":/my_resources/images/backgrounds/blue.png"`),其中前缀`/`被替换为`:`,然后接上文件在qrc中的路径。完成上述步骤后,层级结构的文件夹就被添加到了qrc资源文件中。</think>### 在 Qt 资源文件(qrc)中创建层级文件夹的方法 在 Qt 资源文件(qrc)中创建层级结构可以通过以下两种方式实现: #### 方法 1:使用 Qt Creator 资源编辑器(推荐) 1. **打开资源编辑器** 在项目视图中右击 `.qrc` 文件 → 选择 "Open With" → "Resource Editor"[^1] 2. **创建前缀(模拟文件夹层级)** - 点击左上角 **"添加前缀"** 按钮(或右键空白处选择) - 输入前缀路径(如:`/images/backgrounds`),斜杠 `/` 表示层级分隔 ```xml <!-- 生成的结构 --> <qresource prefix="/images/backgrounds">...</qresource> ``` 3. **添加文件到层级** - 选择创建的前缀 - 点击 **"添加文件"** 或 **"添加目录"** - 勾选 **"递归添加目录"** 保留子文件夹结构 #### 方法 2:手动编辑 .qrc 文件(直接修改 XML) ```xml <RCC> <!-- 第一级目录 --> <qresource prefix="/icons"> <file>toolbar/save.png</file> </qresource> <!-- 第二级目录 --> <qresource prefix="/docs/manuals"> <file>user_guide.pdf</file> </qresource> <!-- 带子目录的结构 --> <qresource prefix="/"> <file>assets/textures/wood.png</file> <file>assets/sounds/click.wav</file> </qresource> </RCC> ``` **关键点**: - 使用 `<qresource prefix="路径">` 定义虚拟文件夹 - 文件路径中的 `/` 会自动创建层级(如 `assets/textures/`) - 根目录使用 `prefix="/"` #### 层级访问示例(代码中引用) ```cpp // 访问 /icons/toolbar/save.png QIcon saveIcon(":/icons/toolbar/save.png"); // 访问 /docs/manuals/user_guide.pdf QFile manual(":/docs/manuals/user_guide.pdf"); // 访问 /assets/textures/wood.png QPixmap woodTex(":/assets/textures/wood.png"); ``` ### 注意事项 1. 资源编译时,文件路径中的目录分隔符必须使用 **正斜杠 `/`**(即使 Windows 系统) 2. 添加整个目录时勾选 **"递归添加"** 保留子文件夹结构[^1] 3. 资源路径在代码中始终以 `:/` 开头(如 `:/images/logo.png`) 4. 修改后需 **重新构建项目** 使更改生效 > 通过合理设计前缀路径和文件位置,可以实现任意深度的资源层级管理。实际目录结构不会物理创建,Qt 资源系统会虚拟映射这些路径[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值