使用QT加载图片的方式比较

343 阅读5分钟

使用QT进行UI开发时,肯定会遇到加载图片资源的情况,目前使用的图片加载方式有以下几种:直接加载、QRC(Qt Resource Collection)Qt资源集合、和RCC(Resource Compiler)资源编译器,下面依次对各方式的使用进行说明,并对其特性进行比较。

一、 直接加载

直接从文件系统中加载图片资源,而不是将图片资源嵌入到应用程序的可执行文件中。

1. 简要说明****

这种方法适合需要频繁更新或动态加载图片资源的应用。开发者只需确保文件路径正确,即可在运行时加载图片。适用于需要在运行时灵活更改资源内容的情况。

2. 使用示例

*int main(int argc, char argv[]) {

QApplication app(argc, argv);

QLabel label;

QPixmap pixmap("path/to/image.png");  // 从文件系统加载图片****

label.setPixmap(pixmap);

label.show();

return app.exec();

}

3. 说明****

Ø  QPixmap用于从指定路径加载图片。

Ø  该图片被设置到QLabel控件上显示。

二、 QRC****

QRC是一种将资源文件(如图片、音频、文本等)嵌入到Qt应用程序中的方式,通过资源路径来访问这些嵌入的文件。

1. 简要说明****

QRC适用于资源文件较少且不频繁更新的项目,资源文件在编译时嵌入可执行文件,路径一致,使用方便。适用于小型到中型项目,且资源更新频率较低。

2.使用示例

****** 资源文件( example.qrc ): ******

```xml

images/image.png

*int main(int argc, char argv[]) {

**  QApplication app(argc, argv);**

QLabel label;

QPixmap pixmap(":/images/image.png");  // QRC 加载图片****

label.setPixmap(pixmap);

label.show();

return app.exec();

}


3. 说明****

Ø  资源文件example.qrc定义了图片资源路径。

Ø  使用qmake工具将资源文件编译为应用程序的一部分。

Ø  图片通过:/images/image.png路径加载。

三、 RCC

RCC是Qt的资源编译器工具,可以将资源文件编译成独立的二进制资源文件,并在运行时加载和卸载这些资源是一种将资源文件(如图片、音频、文本等)嵌入到Qt应用程序中的方式,通过资源路径来访问这些嵌入的文件。

1. 简要说明****

RCC提供了动态加载资源的能力,适合资源文件较多或需要动态管理的项目。资源文件可以独立于可执行文件存在。适合大型项目和需要在运行时动态管理资源的情况。

2.使用示例 ****** 资源文件( resources.qrc ): ******

```xml

images/image.png

```

****** 生成 RCC 文件: ******

```sh

rcc -o resources.rcc resources.qrc

```

****** 代码示例: ******

*int main(int argc, char argv[]) {

**  QApplication app(argc, argv);**

QResource::registerResource("resources.rcc"); // 加载 RCC 资源文件****

QLabel label;

QPixmap pixmap(":/images/image.png");  // RCC 加载图片****

label.setPixmap(pixmap);

label.show();

return app.exec();

}

3. 说明****

Ø  资源文件resources.qrc定义了图片资源路径。

Ø  使用rcc工具将资源文件编译为二进制资源文件resources.rcc。

Ø  通过QResource::registerResource动态加载资源,并使用:/images/image.png路径访问资源。

四、 特性比较

下面对三种方式的特性进行比较说明,如下表所述:

表1 特性比较

属性****直接加载****QRCRCC
版本控制****资源文件独立存在,可以单独更新和回滚资源文件嵌入到代码中,需要与代码版本一起管理。资源文件独立存在,可以单独管理和版本控制。
可扩展性****高度灵活,随时添加或修改图片资源,无需重新编译应用程序资源文件与代码分离,结构清晰;但每次资源更新都需要重新编译可在运行时加载和卸载资源,提供更大的灵活性和可扩展性,但配置相对复杂
资源访问速度****取决于文件系统的速度和资源大小,可能会因磁盘I/O造成延迟资源嵌入可执行文件,加载速度快,适合高频访问的资源资源可以预加载,速度与QRC相似,但在需要时动态加载的资源可能会有初次加载的延迟。
内存使用****资源的内存使用取决于应用程序的实现方式和资源的管理。资源可以在使用后释放,节省内存由于资源嵌入到可执行文件中,加载资源时可能需要占用较多内存,特别是资源文件较大时可以动态加载和卸载资源,内存使用更具弹性。未使用的资源可以不加载,从而节省内存
文件大小****可执行文件体积小,资源文件独立存在可执行文件体积较大,不适合资源文件过多的项目资源文件可以独立存在,也可以嵌入可执行文件,灵活选择
安全性****资源文件暴露在文件系统中,容易被修改或替换资源嵌入可执行文件,较难被篡改资源可以嵌入到独立文件或可执行文件中,可控性高,但增加了配置的复杂性

经过上述分析得到一下综合比较的表格,其中1>2>3:

属性****直接加载****QRCRCC****
版本控制****132
可扩展性****132
资源访问速度****311
内存使用****132
文件大小****132
安全性****321

结合欧标商用项目实际情况分析,优先考虑的为属性为“资源访问速度”,因为,这与用户体验直接挂钩,所以,首先排除“直接加载”这一选项;然后,综合对比“QRC”和“RCC”的各项特性后,选定“RCC”作为资源加载方法。