为了更加形象地展示UI中某些控件的作用,通常会给控件添加ico/png等图片文件,但如果直接从文件中加载,那么生成的exe也会依赖加载的文件路径,如果路径下没有图片,exe上的对应的控件便不会显示。
一种可行的解决方法是,将图片直接放入代码中,因为图片的本质是二进制字节码,可以将图片作为二进制码解析出来,然后放入代码中作为一个大数组,大数组便会被编译到exe中,不会依赖外部的图片文件。自己再写一个图片文件的读取解析工具比较麻烦,而且容易出错。幸运的是,QT已经有这种解决方法的实际实现了,这种方法就是qrc文件。
qrc文件的使用
qrc文件中可以加载ico、png等图片,将qrc加入VS解决方案中,VS在运行时,便会将qrc文件中的图片编译到qrc_xxx.cpp中,qrc_xxx.cpp中会有一个大的数组,用于存储qrc文件中加载的图片生成的二进制码。
编译运行时,是以main.cpp所在路径为当前路径,因此qrc文件应当与main.cpp放置于同一文件夹,在代码中以相对路径加载图片时,通常是以如下形式:
QIcon icon;
icon.addFile(QStringLiteral("./Resources/Icon/Stop.png"), QSize(), QIcon::Normal, QIcon::Off);
ui.m_pTbtnRefreshFrame->setIcon(icon);
将"./Resources/Icon/Stop.png"加入qrc文件后,只需要将上述代码更改为
QIcon icon;
icon.addFile(QStringLiteral(":/Resources/Icon/Stop.png"), QSize(), QIcon::Normal, QIcon::Off);
ui.m_pTbtnRefreshFrame->setIcon(icon);
将当前路径中".“改为”:",QT便会加载qrc_xxx.cpp中的数组。
qrc文件使用时应当注意的问题
qrc应与main.cpp放置于同一文件夹,否则可能会出现加载图片失败的情况,例如,假设qrc文件位于main.cpp所在文件夹的字目录UI下,加载的图片位于Resources/Icon/Stop.png,自动生成的ui_xxxx.h代码,加载图片的路径可能变为"../Resources/Icon/Stop.png",从而导致图片加载失败。