C++常用的支持中文的GUI库Qt 6之二:项目的结构、资源文件的使用

news2024/12/23 14:21:29

C++常用的支持中文的GUI库Qt 6之二:项目的结构、资源文件的使用

上一篇Qt 6的下载、安装与简单使用https://mp.csdn.net/mp_blog/creation/editor/130730203,本文介绍Qt 6的项目的结构、资源文件的使用与发布。

基础

这一部分,初学时不明白是何意思不要纠结,先大体了解即可,在学习实践一段时间后,回头看(回顾)时,就能更好的理解了。

在Qt6中, qmake、CMake 和 Qbs 构建系统的特点

qmake

qmake 使用起来非常简单,并且对于大多数项目来说,足以满足需求。如果你的项目仅需要基本的构建功能,例如编译和链接源文件、管理依赖库和创建安装程序,则使用 qmake 是一个不错的选择。

CMake

CMake 是一种跨平台的构建工具,它可以生成多种不同的项目文件类型,例如 Makefile、Visual Studio Solution 等。CMake 使用起来相比 qmake 要复杂一些,但是它更灵活,并且在处理更大型的项目时会更有优势。如果你打算开发较大规模的应用或库,使用 CMake 并将其与其他构建工具集成可能是一个更好的选择。

Qbs

Qbs 是 Qt 的下一代构建工具,它基于 QML 和 JavaScript,并提供了一种现代、模块化和易于使用的构建语言。Qbs 相比 qmake 和 CMake,使用起来需要一些学习成本,但是它的支持和集成良好,并且它的编译速度更快。如果你希望与 Qt Creator 集成更好,同时在构建速度和项目规模方面获得更大的优势,则使用 Qbs 可能是一个更好的选择。

Qt创建资源文件的方式有以下两种:

1.使用Qt Creator创建资源文件

在Qt Creator中右键单击项目文件夹或文件夹,选择“Add New”->“Qt”->“Qt Resource File”,在弹出的对话框中设置资源文件的名称和保存位置。然后在资源文件编辑器中添加你需要的资源文件,例如图片、音频等。

2.手动创建.qrc文件

可以手动创建一个.qrc文件,然后在文件中添加资源文件的路径及其相关信息。对新手来说,较难就不多说了。

这两种方式都可以用于在Qt6中创建资源文件。使用Qt Creator可以更快捷方便地创建.qrc文件,而手动创建.qrc文件则可以更加精细地控制资源文件的添加和管理。

不同的项目构建系统(qmake、CMake和Qbs)创建的项目资源文件的使用概述

1.qmake项目

在Qt Creator中右键单击项目文件夹或文件夹,选择“Add New”->“Qt”->“Qt Resource File”,在弹出的对话框中设置资源文件的名称和保存位置。然后在资源文件编辑器中添加你需要的资源文件,例如图片、音频等。

添加资源文件后,在.pro项目文件中自动添加了以下代码:

RESOURCES += resources.qrc

其中,resources.qrc为你刚才创建的资源文件名称。

2.CMake项目:

在CMake项目中创建资源文件的方法与在qmake项目中类似。你可以创建一个资源文件,然后将它添加到项目中。例如,可以在项目目录下创建一个名为res.qrc的文件,然后在CMakeLists.txt中添加以下代码:

qt6_add_resources(QTRESOURCES res.qrc)

add_executable(project_name ${QTRESOURCES} ...)

其中,${QTRESOURCES}表示将res.qrc文件中的资源打包到项目中。注意其在文件中的位置:

# CMakeLists.txt

# 最开始应该是 cmake_minimum_required 和 project 命令

# ...

# 找包含 Qt 的 CMake 模块文件

find_package(Qt6 COMPONENTS Widgets REQUIRED)

# 添加资源文件的命令,这里以 res.qrc 为例

qt6_add_resources(QTRESOURCES res.qrc)

# 设置项目文件

set(PROJECT_SRC_FILES

    main.cpp

    # ... 其他源文件 ...

)

# 编译并链接可执行文件

add_executable(project_name

    ${PROJECT_SRC_FILES}

    ${QTRESOURCES} # 把资源文件添加到可执行文件中

)

target_link_libraries(project_name

    Qt6::Widgets

    # ... 其他依赖库 ...

)

3.Qbs项目:

在Qbs项目中创建资源文件与其他两种构建工具的项目略有不同。

首先,你需要在项目文件中添加以下代码片段,创建一个AssetBundle文件:

// 项目路径

var projectPath = project.sourceDirectory

// 资源路径

var assetsPath = projectPath.append("assets")

// 创建AssetBundle文件

var bundle = AssetBundle {

    name: "res.qrc"

    files: [

        // 添加资源文件

        assetsPath.append("icons/search.png")

    ]

}

project.addAssetBundle(bundle)

在上述代码中,project.sourceDirectory 指的是项目文件所在的目录,assets 文件夹是我们假设存在的资源文件存储目录。这里我们利用 AssetBundle 创建了一个 res.qrc 的二进制文件,其中包含 /assets/icons/search.png 这个路径下的图片资源,它将被打包到 AssetBundle 文件中。

然后在你需要使用资源文件的地方,你需要使用以下代码片段进行加载:

import qbs

// 加载方法

var resourceContent = "";

var resourcePath = qbs.getResolvedFilePath("qrc:/res.qrc/path/to/resource");

if (file.exists(resourcePath))

    resourceContent = file.read(resourcePath);

在上述代码中,我们使用 qbs.getResolvedFilePath 来获取类似于文件系统路径的 path。然后使用 file.read 命令读取它的内容,即我们之前要使用的图片资源。

总之,使用Qt Creator创建资源文件可以方便地管理和使用资源文件。对于不同的项目构建工具,具体操作略有不同,并需要遵循相关的规范和语法。

先创建一个Qt项目

要求:输入半径值,单击“计算”按钮后,显示圆面积值

运行Qt Creator,在欢迎界面左侧点“Projects”按钮

相应的文件已经自动加载到项目文件列表中,如下图:

QT Creator向导创建项目后,会自动生成一些源文件和资源文件。

现在,可以进行界面设计

点击Forms 部分展开,双击其中的.ui文件,这里是mainwindow.ui

拖曳控件容器栏的滑动条,在Display Widgets容器栏中找到Label标签控件,拖曳三个此控件到中间的窗体中;同样,在Input Widgets容器栏中找到Line Edit编辑框控件,拖曳此控件到中间的窗体中,用于输入半径值;在Buttons容器栏中找到Push Button按钮控件,拖曳此控件到中间的窗体中,用于提交响应单击事件。

然后需要对各控件属性进行修改,窗体中的控件在右侧出现相应的属性,按下表修改

CLass

text

objectName

frameShape

frameShadow

QLabel

半径

radiusLabel

QLabel

面积

areaLabel_1

QLabel

areaLabel_2

Panel

Sunken

QLineEdit

radiusLineEdit

QPishButton

计算

counBtn

修改后的情况:

现在,编写计算圆面积功能代码

在“Line Edit”编辑框内输入半径值,然后单击“计算”按钮,则在areaLabel_2中显示对应的圆面积。

操作步骤如下。

在“计算”按钮上按鼠标右键,在弹出的下拉菜单中选择“Go to slot...”命令,在“Go to slot”对话框中选择QAbstractButton的“clicked()”信号,单击“OK”按钮,如图所示:

进入MainWindow.cpp文件中按钮单击事件的槽函数on_countBtn_clicked(),在此函数中添加如下代码:

void MainWindow:: on_countBtn_clicked()
{
    bool ok;
    QString tempStr;
    QString valueStr = ui->radiusLineEdit->text();
    int valueInt = valueStr.toInt(&ok);
    double area = valueInt * valueInt * PI;				//计算圆面积
    ui->areaLabel_2->setText(tempStr.setNum(area));
}

在MainWindow.cpp文件开始处添加以下语句:

const static double PI = 3.1416;

参见下图:

现在可以编译运行程序了

在“Line Edit”文本框内输入半径值,单击“计算”按钮后,显示圆面积值:

QT Creator创建的项目的结构

QT Creator创建的项目通常具有以下结构,参见下图:

 ☆项目文件 /构建系统的配置文件:

Qmake的是.pro文件(应用程序名称.pro)

CMake的是CMakeLists.txt文件

Qbs的是. qbs文件(应用程序名称. qbs)

它们都是一个文本文件,包含了整个项目的配置信息,包括所需要的库文件和头文件等。

☆源代码文件 (.cpp, .h):这些文件包含了程序的实现代码和头文件。在QT Creator中,这些文件可以通过项目目录中的“Sources”和“Headers”文件夹进行组织。

☆界面设计文件 (.ui):这些文件用来描述应用程序的用户界面。在QT Creator中,这些文件可以通过项目目录中的“Forms”文件夹进行组织。

☆资源文件 (.qrc):如果已建立这话,因为还未建立故未出现,后面将建立。这些文件用来管理应用程序中的图像、音频、文本和其他数据文件。在QT Creator中,这些文件可以通过项目目录中的“Resources”文件夹进行组织。

☆编译输出文件 (.exe, .dll, .so):这些文件是编译器生成的最终可执行文件或库文件。在QT Creator中,这些文件可以通过项目(Projects)目录中的“Builds”文件夹进行组织。

资源文件的使用

Qt资源系统(Qt Resource System)是一种将图片、数据存储在二进制文件中的一套系统。

在GUI程序中,不可避免地将会使用各类资源,例如图片、音视频资源等,有这些资源,我们可以将普通的按钮设置成带图片的,一些标签也可以用图片来显示,还可以播放动图等。

为了方便的使用这些资源,我们需要使用Qt中的资源文件(.qrc文件)。

Qt使用资源文件(.qrc文件)可以将应用程序所需要的资源文件(如图片、字体、音频等)打包成一个二进制文件,以便于应用程序访问,避免了资源文件和应用程序分离导致的路径问题。

使用Qt Creator创建资源文件(.qrc文件),可以按照以下步骤进行:

在Qt Creator中创建一个新的Qt项目或打开一个已有的Qt项目。

在项目树中右键单击项目(Projects)名称,选择“添加新文件(Add New)”。

在“添加新文件(Add New)”对话框中,选择“Qt” > “Qt资源文件(Qt Resoorce File)”>“选择(Change)”按钮。

在“Qt资源文件(Qt Resoorce File)”对话框中的“Location”页,输入资源文件的名称和路径,单击“下一步”;

然后在“汇总页(Summary)”对话框中添加资源文件。单击“完成(Finish)”按钮,完成资源文件的添加。

参见下图:

添加资源文件后,才可以进行下面的操作。

为程序窗口建立图标。Qt程序窗口图标支持多种图片格式,例如ICO、PNG、SVG等。

在Qt Creator中,打开.qrc文件添加资源文件的步骤

在Qt Creator中打开您的项目。

在左侧的“Projects(项目)”面板中选择您的项目文件夹并单击展开。

找到.qrc文件并右键单击它。

在弹出菜单中选择“Open in Editor(在编辑器中打开)”。

现在,就可以用资源视图中的"Add Prefix"和"Add Files",并按照提示添加相应的文件或文件夹。

先点击资源视图中的Add Prefix按钮,添加前缀名可以修改(前缀名字主要是为了区分这些资源的作用,例如背景音乐资源文件,或者专门给按钮用的图片,或者专门用来做头像的图片等)。我这里建立一个 / Res

然后点击Add Files按钮,添加需要的资源文件。为了方便管理避免误操作和后续的修改,建议你在项目目录中建立子文件夹,将资源文件先手工复制进去。【否则出现如下提示

添加窗体图标(icon)、给按钮用的图标(icon)和给窗体背景图片有多种办法。

下面是设置窗体图标办法

我这里是(其中项目目录ch01,资源文件目录ResFolder)

用资源视图中的"Add Prefix"和"Add Files",先将作为窗体图片的Qt.png图片文件添加到.qrc文件中,操作步骤:Qt Creator中,在左侧的“Projects(项目)”面板中,选择您的项目文件夹单击展开,找到.qrc文件并右键单击它,在弹出菜单中选择“Open in Editor (在编辑器中打开)”,这样,您就可以将资源文件——这里是Qt.png图片文件添加到.qrc文件中了。参见下图:

再按如下办法之一进行:

法1、在Qt Designer中直接设置:在窗体属性编辑器中,在"windowIcon"属性栏中选择图标文件。

法2、也可以使用代码设置

提示:在应用程序中使用资源文件,可以使用":/"前缀来表示该资源文件,如:QPixmap(":/images/logo.png"),其中":/"表示根目录,后面的"images/logo.png"则表示在资源文件中的路径。

我这里将图标文件添加到应用程序源文件中,在main.cpp中添加以下代码:

QGuiApplication::setWindowIcon(QIcon(":/Res/ResFolder/Qt.png"));//添加窗体图标

参见下图:

用上面两种办法之一即可。现在运行,图标换了:

设置窗体背景图片

用资源视图中的"Add Prefix"和"Add Files",先将作为窗体背景图片的BGImage.jpg图片文件添加到.qrc文件中,

参见下图:

再按如下办法进行:

在Qt Designer中直接设置:在窗体属性编辑器中,在"styleSheet"属性栏中指定背景图片路径。参见下图:

注意,上图中需要手工加入background-image: 

也可以使用代码设置窗体背景图片,比较麻烦,在此就不介绍了。

现在运行,窗体背景换了:

Qt 资源系统更多情况可参见https://zhuanlan.zhihu.com/p/60457016

上面的小应用程序就算开发完了,下篇介绍打包发布:

C++常用的支持中文的GUI库Qt 6之三: Qt 6的项目的发布 https://blog.csdn.net/cnds123/article/details/130827966

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

交通 | 考虑网络效应的共享出行差异化定价

封面图来源: https://www.pexels.com/zh-cn/photo/210182/ 编者按: 本文考虑了单程式共享汽车的定价问题,在考虑顾客需求网络效应以及实现影响的场景下,根据空间以及时间确定汽车租赁的单价以实现系统利润最大化。 1.引言 在过…

【C++】unordered_map unordered_set 练习题

文章目录 unordered系列关联式容器unordered_mapunordered_map的文档介绍unordered_map的构造接口使用: unordered_multimapunorder_map&&unorder_multimap对比:unordered_setunordered_set的文档介绍unordered_set的构造接口使用 unordered_multisetOJ练习961.在长度2…

( 回溯算法) 27. 移除元素 ——【Leetcode每日一题】

❓27. 移除元素 难度:简单 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以…

ip地址段分解与合并

1、为什么要分解和合并ip地址段 无他,工作需要嘛,谁没事去划分ip地址段 优点:可以节省大量的时间,减少算错的可能性 2、工具下载 下载链接: https://github.com/zhanhb/cidr-merger github在国内使用不太友好&#…

14、IIC主机控制--引脚软件模拟

时序图: 软件基于STM32 HAL库 IIC–定时器精确延时 软件用涉及到使用定时器做精确延时,可以参考我的文章–“CubeMx 定时器高精度延时” 延时使用的文件: tim.c /*********************************************************************…

Linux基础内容(21)—— 进程消息队列和信号量

Linux基础内容(20)—— 共享内存_哈里沃克的博客-CSDN博客 目录 1.消息队列 1.定义 2.操作 2.信号量 1.定义 2.细节 3.延申 4.操作 3.IPC的特点共性 1.消息队列 1.定义 定义:是操作系统提供的内核级队列 2.操作 msgget:…

Java实现MQTT传输协议通信

Java实现MQTT传输协议通信 1. MQTT1.1 概述1.2 发布和订阅模型1.3 客户端1.4 服务器1.5 订阅、主题、会话1.6 协议中的方法2. Java使用MQTT2.1 添加 pom 依赖2.3 订阅方2.4 发布方2.4 MQTT 连接创建方式2.4.1 普通 TCP 连接2.4.2 TLS/SSL 连接1. MQTT

java_day01_单元测试_配置文件

一、软件的生命周期 **软件的可行性分析:**分析该软件是否值的研发,会消耗多少成本,能带来多少的利益等分析 **需求分析:**分析该软件具体该具备有那些功能,产品经理与客户一起讨论 **软件设计:**该软件应该使用什么样的架构,用什么样的数据库,每个模块的具体功能 **程序编…

2023年8大黑客编程语言

以下是2023年最适合黑客攻击的8种编程语言的列表。 道德黑客被定义为合法进入各种网络的做法,目的是识别黑客可能利用的潜在弱点来访问网络。此类黑客攻击旨在在任何漏洞进入危险攻击者手中之前发现它们,然后及时修复它们以防止攻击。让我们进入文章&am…

【数字通信】PAM基带信号的功率谱原理推导详解

PAM信号可以说是最简单的数字通信信号,很多理论最初都是由该信号的表达式推导得到并进行拓展的,纵观各类数字信号的表达式,或多或少都有PAM信号的“影子”,也就是说PAM信号相关的理论知识是最基本的,很有必要搞清楚,本博客主要讨论PAM基带信号的功率谱的原理及推导过程,…

我干了8年测试,告诉你现在软件测试还能不能找到工作!

观点:如果你还是以前的思维来学习测试,那你肯定是找不到工作! 我做测试工作有将近8年的时间,蚂蚁金服做过2年,因为加班太多离职了。目前在一家国企上市公司,一年能拿三四十个左右,对比头部互联…

系统集成项目管理工程师 下午 真题 及考点(2018年下半年)

文章目录 一:第4章 项目管理一般知识,项目管理办公室的职责。第6章 项目整体管理二:第5章 项目立项管理。第14章 项目采购管理,采购文件。第13章 项目合同管理,按项目 付款方式 划分的合同分类三:第9章 项目…

GB/T28181-2022针对H.265编码细化及技术实现

技术背景 新版国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》已于2022年12月30日发布,并将于2023年7月1日正式实施。 国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》规定了公共安全视频监控…

RocketMQ学习

各MQ 并发性能比较 吞吐量 kafka 17.3w/s rocketMQ 11.6w/s RabbitMQ 5.96w/s RocketMQ组件 broker 核心业务组件 nameServe 保存broker 的ip、端口、上下线信息等。 类似注册中心 启动nameServe 时会调用 runserver 启动broker ,会默认读取/conf/broker.conf …

第3章“程序的机器级表示”:程序编码 和 数据格式

文章目录 3.2 程序编码3.2.1 机器级代码3.2.2 代码示例3.2.3 关于格式的注解 3.3 数据格式 3.2 程序编码 假设写一个 C 程序,有两个文件 p1.c 和 p2.c。然后用 Unix 命令行编译这段代码: unix> gcc -O2 -o p p1.c p2.c命令 gcc 表明的就是 GNU C 编…

嵌入式 Linux 入门(十一、make 和 MakeFile)

嵌入式 Linux 入门第十一课,Make 工具和 Makefile 的引入...... 矜辰所致目录 前言一、Linux 下多文件编译二、make 工具和 Makefile2.1 make 和 Makefile 是什么?2.2 通过 STM32 提前熟悉 Makefile2.3 GCC 与 make 的关系/区别? 三、一个简单的 Makefi…

〖Python网络爬虫实战㉙〗- Selenium案例实战(三)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

OpenGL之着色器

文章目录 什么是着色器数据类型输入与输出Uniform三角形渐变色例子从文件中读取 什么是着色器 着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。着色器的开头总是要声明版本,接着是输入和输…

攻击面管理有多重要?从一个社工钓鱼的仿冒网站说起

2023年4月中旬,A企业紧锣密鼓地展开了重保前期的筹备。A企业是一家集团公司,业务范围广,资产众多,为了提前了解自身安全情况,探知未知风险,公司通过自身资产清单及配套手段对自身资产暴露情况进行了梳理。 …

总结springboot项目中一些后端接收前端传参的方法

文章目录 1、java方法入参里面什么注解都没有2、不使用&#xff1f;&来拼接参数&#xff0c;在参数中添加PathVariable注解3、RequestBody 先创建一个springboot项目&#xff0c;并在pom文件中添加web依赖&#xff1a; <dependency><groupId>org.springframewo…