Qt资源系统

1.Qt资源系统

Qt资源管理系统是一种不依赖平台的独特机制,用于在应用程序的可执行文件中存储二进制文件。出于不同的目的(防止图标文件丢失或恶意更改),开发者不希望本程序的资源文件被更改。因此,把资源文件存储在可执行文件中,这就是静态加载资源方式。静态方式的缺点就是编译出的可执行文件容量会增加。为避免这一问题,将资源文件以二进制形式单独存储在一个文件中,这就是动态加载资源方式

​ Qt 资源系统是基于qmake、 rcc(Qt’s resource compiler), and QFile而实现的。

2. 资源收集文件.qrc

​ 那编译器又是如何知道哪些资源文件需要加载到可执行文件中的呢?资源收集文件.qrc闪亮登场。

<RCC>
    <qresource prefix="/img">
        <file alias="subscript_img">zhihutubiao.png</file>
    </qresource>
    <qresource prefix="/img/fr" lang="fr">
        <file alias="subscript_img">zhihutubiao.png</file>
    </qresource>
</RCC>

​ **.qrc文件是基于xml格式的系统资源配置文件。**该文件的file标签指出了项目所需要的资源文件,可以通过alias标签给文件分配资源名称,lang标签是语言标签,可以根据 QLocale::system().name() 返回的语言值选择加载的同名资源文件。指定的路径是相对于包含.qrc文件的目录的,请注意,列出的资源文件必须与.qrc文件位于同一目录或其子目录之一。

​ 项目中访问加载资源有两种方式

  • 文件路径形式:/img/subscript_img
  • URL形式:qrc:///img/subscript_img

3.创建资源收集文件.qrc

​ 创建资源收集文件最简单的方式就是使用Qt Creator创建。

​ 首先需要创建一个Qt Resource File;

在这里插入图片描述

​ 然后,右键打开;

在这里插入图片描述

​ 最后,先添加标签,再添加文件。

在这里插入图片描述

​ 使用Qt Creator创建和添加资源文件虽然方便,但是在面对大批量的资源文件时却显得力不从心,这就需要手写了。我的建议是熟悉qrc的规则,然后使用代码批量化在某一目录下的获取资源文件,剩下的就是字符串操作了。

4.加载资源

​ 加载资源有两种,一种是直接将资源数据存储在可执行文件中(静态方式),另一种是将资源数据存储在单独的二进制文件中并由可执行文件调用(动态方式)。

4.1静态方式

​ 除了用 Qt Creator 在工程中添加 qrc 文件以外,需要在 pro 文件中加入 qrc 文件以便 qmake 能识别资源文件,一般这步会被自动添加。

pro文件

RESOURCES += \
    res.qrc
4.2动态方式

不会(待填坑)。

参考链接

1.Qt 资源系统(Qt Resource System)

2.Qt资源系统(The Qt Resource System)

3.Qt 学习之路 2(9):资源文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现系统资源监控 CPU Memory,可以使用Qt的QSystemTrayIcon和QTimer组合实现系统托盘图标和定时器的功能。具体实现步骤如下: 1. 在Qt的工程中添加QSystemTrayIcon和QTimer头文件。 2. 在窗口初始化时创建系统托盘图标,并设置托盘图标的菜单和提示信息。 3. 使用定时器定时获取系统的CPU和内存使用情况,并将获取的数据显示在托盘图标的提示信息中。 4. 在定时器的槽函数中使用Qt提供的QProcess类执行系统命令获取CPU和内存的使用情况。 下面是一个简单的示例代码: ```c++ #include <QApplication> #include <QSystemTrayIcon> #include <QMenu> #include <QTimer> #include <QProcess> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建系统托盘图标 QSystemTrayIcon trayIcon; trayIcon.setToolTip("System Monitor"); // 创建托盘图标的菜单 QMenu *menu = new QMenu(); QAction *quitAction = new QAction("Quit", menu); connect(quitAction, &QAction::triggered, &a, &QApplication::quit); menu->addAction(quitAction); trayIcon.setContextMenu(menu); // 创建定时器并启动 QTimer timer; timer.start(1000); QObject::connect(&timer, &QTimer::timeout, [&]() { // 执行系统命令获取CPU和内存的使用情况 QProcess process; process.start("sh", QStringList() << "-c" << "top -bn1 | grep load | awk '{printf \"CPU: %.2f%%\", $(NF-2)}'; free -m | awk 'NR==2{printf \" Memory: %s/%sMB (%.2f%%)\", $3,$2,$3*100/$2}'"); process.waitForFinished(); QString result = process.readAll(); trayIcon.setToolTip(result); }); // 显示系统托盘图标 trayIcon.show(); return a.exec(); } ``` 在定时器的槽函数中,我们使用QProcess执行了两个系统命令,分别是top和free,通过管道符将它们的输出传递给awk命令进行处理,最终得到CPU和内存的使用情况。然后将获取的结果设置为托盘图标的提示信息即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值