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

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

创建qrc文件

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

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

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

加载资源

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

RESOURCES += \Resources/Resources.qrc

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

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

添加资源文件

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

然后我们给每个组Add Files。

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

使用资源

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,其中资源的路径可以通过下图方式直接获取:

使用Path和URL都是可以的。

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

    connectPB=new QPushButton(QChar(0xf0f9));

Qt中的Resource相关推荐

  1. Qt中为工程添加资源文件、给按钮添加图片

    Qt中为工程添加资源文件.给按钮添加图片 1.使用QIcon类.代码如下: QIcon icon;icon.addFile(tr("res/icon/wall.png"));ui- ...

  2. Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)

    关于虚函数的简单例子 首先是一个很简单例子,刚学C++的朋友都能理解 源码如下: #include <cstdio> #include <windows.h>static in ...

  3. QT中QLabel的常见使用方法

    QLabel标签控件在QT中算是比较常见的,它一般都是用来显示文本内容,当然它的功能不是只局限在这里,还可以用它来显示照片,gif动画等,那接下来就看看是如何操作它的吧: 首先先创建一个新项目,在ui ...

  4. Qt中如何给按钮加图标(背景图片)

    Qt中如何给按钮加图标(背景图片) 1. Qt Designer中拖入一Tool Button 2. 选择图标的图片放入工程目录下,如放在Resources内 3. 双击工程的Resource Fil ...

  5. 在Qt中添加菜单图标

    第一步:新建Qt Widgets Application,取合适的项目名称,基类选择QMainWindow,类名为MainWindow. 第二步:创建完项目后,双击mainwindow.ui文件进入设 ...

  6. Qt中按钮图标的设置、按钮按下时浮动效果设置 以及 QT的EXE程序图标设置

    本文内容皆为Qt 5.13版本. 使用 IDE为 QTCreator.若是 VS+QT插件环境则可能有略微差异. 推荐一个不错的图标网站,大部分资源都可以免费下载: https://www.easyi ...

  7. Qt中文文档-QFile

    公众号:Qt那些事儿 QFile Class QFile 类提供读写文件的接口. 属性 方法 Header: #include qmake: QT += core Inherits: QFileDev ...

  8. QT 中QTimer 和 startTimer()的区别

    最需要注意一点 请注意,QTimer的准确性取决于底层操作系统和硬件.timerType参数允许您自定义计时器的准确性.有关不同计时器类型的信息,请参见Qt::TimerType.大多数平台支持20毫 ...

  9. QT 中使用 OpenCv 的 CascadeClassifier 报错

    问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fa ...

最新文章

  1. python logging
  2. 一篇带你搞透回溯算法
  3. shell 命令详解
  4. CVS代码库管理安装配置
  5. coreseek/sphinx CentOS6.4下安装
  6. 美团王兴:互联网下半场基本功不过关 活下去都很难
  7. C/C++ 存储类型 作用域 连接类型
  8. 看懂这些代码,我哭着笑了
  9. 自己做的一个简历网页,有很多bug解决不了,有没有大神帮我看看
  10. python _滑动时间窗
  11. Ubuntu18.04安装PX4并与ROS联合实验
  12. python如何修改图片透明度_如何改变图像的不透明度
  13. SCQ16GS03M1F1C-32AA 紫光动态存储器
  14. 未来架构:从服务化到云原生
  15. 在线网校教育平台的开发,题库的搭建必不可少
  16. 统信桌面操作系统V20专业版(1022)发布
  17. Python实现红黑树
  18. IntelliJ IDEA JDK配置
  19. 偏向锁、轻量锁、重量锁的理解
  20. 【NOIP校内模拟】图论题

热门文章

  1. 字符串排序(英文字母从 A 到 Z 排列,不区分大小写;同一个英文字母的大小写同时存在时,按照输入顺序排列)
  2. sitemesh 使用方法
  3. 数字视频稳定处理面临的困难
  4. Flutter 加载 pdf
  5. 数据中心机房建设有哪些关键问题要考虑?
  6. oracle ob12创建用户,Oracle 11g用户创建、授权和导入dmp文件
  7. C语言入门 hello world
  8. 运筹说 第89期|网络计划-网络计划的优化
  9. 指数蛙分享提升百度指数的方法教程
  10. springboot jpa自定义SQL查询