Qt中的Resource

Qt资源系统(Qt Resource System)是一种将图片、数据存储在二进制文件中的一套系统。一般我们在程序中调用一张图片或者一个图标字体作为某个按钮的图标,如果替换成另一张同名的图片,那么程序运行时会加载新的图标。有这么一种情况,开发者不希望这些图标被修改或图标文件丢了程序界面也就不能正常显示。

我们可以把这些图片存储在可执行文件中,即使删除了文件夹中的图标也不会影响界面图标的加载,因为图标数据已经以静态数据的方式保存在可执行文件中了。当然,代价就是编译出的可执行文件容量会增加,克服这个缺点的方法就是动态加载资源。

创建qrc文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPHdsRwf-1663406172989)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917144010672.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qpzhvmzi-1663406172990)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917144843198.png)]

在新建文件中选择Qt Resource File,配置路径的时候最好在项目根目录下新建一个文件夹专门存放resource相关的文件。

创建完成后,我们可以在项目中看到已经有了一个Resouces文件夹,注意这个文件夹是系统自动生成的,不是我们手动生成的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TToCY2aQ-1663406172991)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917145036675.png)]

在Resources目录下有一个Resources\Resources.qrc文件,这个文件才是我们刚才新建的,并且在根目录下的Resources文件夹下。我们新建的Resources文件夹只是碰巧与项目中的Resources目录名称一样,当然,你也可以使用其他名称。

加载资源

我们创建了qrc文件后,可以检查pro文件,会发现多了一个句话:

RESOURCES += \
    Resources/Resources.qrc

这是一个静态加载方式,默认情况下就是这种方式,是直接将资源数据存储在可执行文件中。

另外一种方式的动态加载方式,是将资源数据存储在单独的二进制文件中并由可执行文件调用。这种方式需要手动用rcc工具编译qrc文件,然后用QResource类加载,这里就不举例了。

添加资源文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZCZ5G5al-1663406172991)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917145952574.png)]

进入资源编辑器后,首先需要添加一个前缀,这个东西其实就和目录差不多的,本质就是分组。如下图,我们已经分了3个组。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eVroxkm5-1663406172991)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917151002932.png)]

然后我们给每个组Add Files。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTDxc17x-1663406172992)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917151335867.png)]

我们也可以使用普通文本编辑器打开qrc文件,发现其实就是xml文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJs6Fmba-1663406172993)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917151700297.png)]

使用资源

static void loadStyle(e)
{
    QFile file(":/style/Style/blacksoft.css");

    if (file.open(QFile::ReadOnly)) {
        QString qss = QLatin1String(file.readAll());
        QString paletteColor = qss.mid(20, 7);
        qApp->setPalette(QPalette(paletteColor));
        qApp->setStyleSheet(qss);
        file.close();
    }
}

static void loadFont()
{
    QFont iconFont;
    QFontDatabase fontDb;
    if(fontDb.hasFamily("FontAwesome"))
    {
        iconFont=QFont("FontAwesome");
    }
    else
    {
        int fontId = fontDb.addApplicationFont(":/font/Font/fontawesome-webfont.ttf");
                QStringList fontName = fontDb.applicationFontFamilies(fontId);
                if (fontName.count() == 0) {
                    qDebug("load fontawesome-webfont.ttf error");
                }
    }
    iconFont=QFont("FontAwesome");
    qApp->setFont(iconFont);
}

上述两个代码分别设置了style和font,其中资源的路径可以通过下图方式直接获取:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEt3ziGR-1663406172993)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220917170811499.png)]

使用Path和URL都是可以的。

关于字体图标的使用,这里多写几句。一般的除了ttf文件,还会有一个图形字体(Unicode)对照表,我们将widget的文本设置为Unicode就可以看到它的图形。

    connectPB=new QPushButton(QChar(0xf0f9));
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值