`

QT资源文件

    博客分类:
  • QT
阅读更多

Qt资源体系采用平台独立机制来存储应用程序执行时的二进制文件。这种机制在应用程序需要一些确定的文件(图标、翻译文件等等)而且又不想冒丢失文件的风险时是有用的。

资源体系依赖于 qmake, rcc (Qt's resource compiler), 和 QFile 的紧密协作。Qt 3 的 qembed 工具和 image collection 机制被废除。

 

Resource Collection Files (.qrc)
与应用程序关联的应用程序由 .qrc 文件来指定,它用XML记录硬盘上的文件和对应的随意指定的资源名称,应用程序通过资源名称来访问资源。

一个.qrc 文件的例子:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
     <file>images/copy.png</file>
     <file>images/cut.png</file>
     <file>images/new.png</file>
     <file>images/open.png</file>
     <file>images/paste.png</file>
     <file>images/save.png</file>
</qresource>
</RCC>


.qrc 文件中列出的资源文件是程序的源码树的一部分。指定的路径是 .qrc 文件所在目录的相对路径。注意,列出的资源文件必须位于 .qrc 文件所在目录或者其子目录下。

 

资源数据也能被编译进二进制文件中,因此应用程序代码可以立即访问;也可以创建一个二进制资源,稍后在程序中登记了资源体系的代码中指定。

缺省时,程序可以用资源在源码树中的名称加一个 :/ 前缀来访问它。例如,在程序的源码树中是 images/cut.png 的文件可以通过 :/images/cut.png 来访问。但也可以用 file 标签中的 alias 属性来指定:

<file alias="cut-img.png">images/cut.png</file>
这时该文件可以通过 :/cut-img.png 来访问。也可以在 .qrc 文件中用 qresource 标签的 prefix 属性:它可以为 .qrc 文件中所有文件指定一个前缀:

<qresource prefix="/myresources">
     <file alias="cut-img.png">images/cut.png</file>
</qresource>
这时该文件可以用 :/myresources/cut-img.png 访问。

 

有些资源,像翻译文件和图标,需要随着用户的本地配置而变化。这可以在 qresource 标签的 lang 属性中指定一个合适的本地化字串来实现。例如:

<qresource>
     <file>cut.jpg</file>
</qresource>
<qresource lang="fr">
     <file alias="cut.jpg">cut_fr.jpg</file>
</qresource>
如果用户的本地化设置是 French (也就是说,QLocale::system().name() returns "fr_FR"),:/cut.jpg 就会引用 cut_fr.jpg 图像。对于其他本地化设置,仍然用 cut.jpg 。

本地化字串的使用格式参见 QLocale 文档。

 

使用外部二进制资源
为创建一个外部二进制资源,需要通过向 rcc 传递 -binary 开关来生成资源数据(一般是.rcc扩展名)。然后可以用 QResource API 来注册资源。例如,一个 .qrc 文件指定的资源数据集可以用下面方法编译:
rcc -binary myresource.qrc -o myresource.rcc
应用程序中,用下面的代码注册资源: QResource::registerResource("/path/to/myresource.rcc");

Compiled-In Resources
必须在应用程序的 .pro 文件中指定.qrc 文件, qmake 才能知道并将资源编译进二进制文件。例如:

RESOURCES  +  = application.qrc
qmake 将产生make规则来生成一个叫做 qrc_application.cpp 的文件并把它链接到应用程序中。该文件中,图像和其他资源的所有数据被以压缩二进制数据存进静态C++数组中。 .qrc 文件被改变或者它引用的文件中的某一个被改变时, qrc_application.cpp 自动重新生成。若你没有使用 .pro 文件,你也可以手动调用 rcc 或者在你的编译系统中添加创建规则。

 

通常,Qt直接将数据存储在可执行文件中,甚至在Windows和Mac OS X这些提供资源本地支持的操作系统中也是这样。这可能会在未来的Qt版本中改变。

 

应用程序中,绝大多数地方都可以用资源路径代替原始文件系统路径。尤其是在 QIcon, QImage, or QPixmap 构造器中可以传递资源路径来代替文件名称:

     cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);

在内存中,资源被用资源对象树来描述。该树在启动时自动构建并用QFile来解析资源路径。可以用":/" 初始化的 QDir 来从资源树的根部开始浏览。

Qt资源支持搜索路径列表概念。若用 ":"代替":/"做前缀来引用一个资源,资源将被用搜索路径列表查询。启动时搜索路径列表是空的,调用 QDir::addResourceSearchPath() 可以添加路径。

If you have resources in a static library,必须用.qrc 文件的base name作参数调用 Q_INIT_RESOURCE() 来强制初始化资源。例如:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Q_INIT_RESOURCE(graphlib);
    ...
    return app.exec();
 }

 
同样地,若你需要显式卸载一个资源集(因插件被卸载或资源失效),需要用与前面相同的base name为参数调用Q_CLEANUP_RESOURCE() 来强制移除资源。

 

 

分享到:
评论

相关推荐

    在Qt资源文件中包含和释放exe等各种类型文件

    下面我们将详细探讨如何在Qt资源文件中包含和释放这些文件。 首先,创建Qt资源文件(.qrc)是第一步。在Qt Creator中,可以通过"文件" -&gt; "添加新文件..." -&gt; "Qt" -&gt; "Qt资源文件"来创建一个新的资源文件。在打开...

    【QT】08qt资源文件文章代码

    在QT中,资源文件(QRC文件)扮演着重要角色,为应用程序提供了一种组织和管理静态资源如图片、字体、音频文件、XML文档等的方式。资源文件的使用可以避免硬编码文件路径,使得应用程序在不同操作系统和环境下更易...

    vs中编写qt程序如何像qt create一样添加资源文件

    在Visual Studio(VS)环境中编写Qt程序时,与Qt Creator相比,添加资源文件的过程略有不同。Qt Creator提供了直观的图形用户界面,使得添加资源文件变得简单。而在VS中,我们需要手动配置一些步骤来实现相同的功能...

    QT文件资源管理器

    QT文件资源管理器是基于Qt库开发的一款应用程序,它提供了类似于操作系统内置文件管理器的功能,让用户可以浏览、操作和管理本地文件系统。Qt是一个跨平台的C++图形用户界面应用程序开发框架,支持Windows、Linux、...

    QT资源文件111

    应用程序的plugin实际是实现了一个或多个接口(interface)的动态库。应用程序与plugin之间的通讯是通过interface的virtual table来完成的。 一个接口(interface)通常声明一个virtual析构函数,一个返回QStringList...

    Qt资源应用示例.rar

    1. **创建资源文件**:在Qt Creator中,可以通过“文件”-&gt;“新建文件或项目”-&gt;“Qt”-&gt;“Qt资源文件”来创建一个`.qrc`文件。在该文件中,可以添加、删除和组织资源文件,形成一个树状结构。 2. **添加资源**:在...

    MO,PO,QT资源汉化利器 Virtaal-0.7.1

    Virtaal是一款强大的翻译工具,特别适用于处理MO、PO以及QT资源文件的汉化工作。在IT领域,软件本地化是让应用适应不同语言和地区的关键步骤,而Virtaal为这个过程提供了极大的便利。 首先,让我们来理解一下MO、PO...

    QT文件夹绝对路径定位

    在QT应用程序开发中,经常需要处理文件系统的操作,例如查找特定目录的位置、读取或写入文件等。其中,获取文件夹的绝对路径是一项基本但非常重要的功能。绝对路径是指从根目录开始到达目标文件或文件夹的具体路径,...

    QT实现文件资源管理器

    QT实现文件资源管理器是一个基于C++编程语言和QT库的应用程序开发项目,它提供了类似于Windows资源管理器或macOS Finder的功能。QT库是Qt公司开发的一个强大的跨平台应用程序开发框架,支持Windows、Linux、macOS等...

    Qt实现文件拷贝

    在本文中,我们将深入探讨如何使用Qt框架在C++中实现多线程文件拷贝功能。Qt是一个跨平台的应用程序开发框架,它提供了丰富的API来处理文件操作和多线程编程,使得我们可以方便地实现高效的文件复制任务。 首先,...

    Qt自制的文件资源管理器

    【Qt自制的文件资源管理器】是一个利用Qt框架开发的应用程序,它允许用户在本地或网络上浏览、管理和操作文件及目录。Qt是Qt Company提供的一款跨平台的应用程序开发框架,支持Windows、Linux、macOS等多种操作系统...

    最新QT VS Tool 2022和 2019

    - **资源编辑器**:管理Qt资源文件(.qrc),如图像、音频等。 - **UI设计**:通过Qt Designer集成,可以设计和编辑UI界面,并将其转换为C++代码。 4. **版本差异**: 虽然两个版本的基本功能相似,但可能存在的...

    基于Qt实现的网盘系统..zip

    2. resources/ - 放置Qt资源文件,如图标、图片等。 3. db/ - 包含数据库连接配置和数据库脚本。 4. config/ - 存储系统配置文件,如用户设置、服务器信息等。 5. build/ - 编译生成的可执行文件和其他中间文件。 6....

    基于QT的文件浏览器.zip

    【基于QT的文件浏览器】是一种使用QT开发框架构建的应用程序,它允许用户浏览和操作本地文件系统。QT是一个跨平台的C++库,为开发者提供了丰富的API,用于创建图形用户界面(GUI)和其他多种功能。在文件浏览器的...

    从excel中导入数据至QT翻译文件

    在QT应用程序中,TS文件用于存储各种语言的字符串资源,方便进行国际化和本地化处理。 首先,我们要理解标题"从excel中导入数据至QT翻译文件"所涉及的关键步骤。这个过程通常包括以下部分: 1. **读取Excel文件**...

    qrceditor Qt中qrc文件编辑器

    编辑Qt资源文件qrc。

    Qt实现简单的文件列表,类似资源管理器的图标浏览。

    在本文中,我们将深入探讨如何使用Qt框架来实现一个简单的文件列表,该列表可以像资源管理器那样以图标形式展示文件。我们将重点关注标题和描述中提及的两个关键点:动态调整`scrollarea`以及递归检索文件。 首先,...

    qt读取excel文件

    在Qt框架下,读取Excel文件通常涉及到使用第三方库,如QAxContainer模块或QCustomPlot等。QAxContainer允许Qt应用程序与ActiveX控件交互,而Excel文件可以通过Microsoft的COM接口来访问。以下是详细的知识点说明: ...

    winnt.h文件(qt报错)

    qt vs编译报错error C2146: syntax error : missing ';' before identifier 'PVOID64',替换C:\Program Files (x86)\Windows Kits\8.1\Include\um中的winnt.h文件即可

Global site tag (gtag.js) - Google Analytics