自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

啊渊的专栏

国产操作系统下的QT开发教程

  • 博客(452)
  • 资源 (32)
  • 问答 (1)
  • 收藏
  • 关注

原创 QT入门看这一篇就够(详解含源码)

qt教程,qt项目,qt下载,qt项目实战,qt多线程,包括Qt环境搭建、Qt数据类型、Qt核心、Qt基础空间、Qt对话框、Qt数据模型、Qt文件处理、Qt高级控件、Qt项目开发,Qt核心对象Object、Qt的demo含源码等

2023-10-16 08:00:00 12219 18

原创 《入门级-Cocos2d 4.0塔防游戏开发》---实战

在这份教程中,我们将探索如何在 UOS 专业版本搭建 Cocos2d-x 4.0 的开发环境,并逐步开发一个简单的游戏欢迎界面。在第一课中,我们将学习场景的添加与管理,掌握 Cocos2d-x 4.0 的基础开发知识。在第二课,我们将重点介绍游戏加载界面的开发,详解场景添加的技巧与用法。在第三课,我们将实现欢迎界面的精灵添加和位置设置,以及实现加载页面到欢迎页面的转场效果。第四课将着重展示精灵的动画功能开发,包括移动、变大变小和帧动画的实现。最后,在第五课,我们将深入讲解精灵的鼠标响应事件,使你能够为你的游

2023-08-01 13:40:19 2434 4

原创 Qt项目开发实例 (含源码)

qt教程、qt项目、qt下载、qt项目实战、qt多线程。本文通过分析demo源码,QT实战的方式进行学习,学习路线是以实战为目录,全面的使用自己的学习知识,文章中编写一系列的学习游戏demo,与大家一起分享。

2021-11-29 11:00:00 39816 6

原创 系统架构设计师历年真题2013-2021

系统架构设计师历年真题。2021年系统架构设计师真题(综合题) 上午2021年系统架构设计师真题(案例分析) 下午2021年系统架构设计师真题(论文) 下午2020年系统架构设计师真题( 综合题 ) 上午2019年系统架构设计师真题( 综合题 ) 上午2019年系统架构设计师真题(案例分析)下午2018年系统架构设计师真题( 综合题 ) 上午2016年系统架构设计师真题(综合知识)含答案2015年系统架构设计师真题( 综合题 ) 上午2014年系统架构设计师真题( 综合题 ) 上午...

2021-10-05 12:33:32 1431 1

原创 华为交换机配置入门实战系列教程(ENSP)

​《第一讲:测试环境的基本搭建》主要讲解使用了哪些软件。《第二讲:主机直连配置》主要讲解了两台主机通过网线直接连线配置通信。《第三讲:交换机的基本介绍》主要讲解了交换机需要用到的一些基本知识讲解。《第四讲:两主机通过交换机通信》两台PC机链接一台交换机配置相同vlan使其进行通信。《第五讲:不同交换机配置相同vlan通信》两台PC机分别链接两台交换机,并且两台PC主机配置相同的vlan。《第六讲:不同vlan相互通信》两台PC机链接一台交换机,两主机配置不同vlan使其

2020-03-08 00:51:42 4670 3

原创 《开发环境搭建》ArkUi 第一课

选择对应的平台下载对应的开发工具,我使用的是windows系统所以下载window就好了。

2024-03-10 22:24:21 54

原创 华为荣耀终端机试真题

字符展开(200分)

2024-03-05 21:59:27 541

原创 STL源码to_string解析

文件地址:libstdc+±v3\include\bits\basic_string.h。

2024-01-31 10:08:41 57

原创 C++11可变模板

定义一个递归的函数。T:表示一个,Types:表示多个。每次递归都移除一个参数,直到最后一个参数为止。void print(const T& firstArg)为结束递归的函数。

2024-01-30 18:05:36 156

原创 C++字符串分割

C++ 的 std::string 类并没有直接提供类似于 Python 中 split 方法的内置函数,但你可以使用其他方式来实现字符串分割。因此我们需要自己去实现这个方法。

2024-01-30 16:37:11 61

原创 Cppcheck静态分析工具详解

你可以从Cppcheck的官方网站(Cppcheck下载页面)下载并安装Cppcheck。安装完成后,你可以在终端或命令提示符中使用Cppcheck命令。

2024-01-18 17:26:13 86

原创 chromium+clangd快速代码跳转

在开发chromium的时候我们使用vscode工具进行开发,如果使用C++插件发现很容就卡死计算机了。所以我们使用clangd工具来查看chromium的代码。

2024-01-16 14:02:45 148

原创 cmake构建动态库实例(cmakelist)

使用相对路径引用动态库的方式-rpath设置。最外层CMakeLists.txt。

2024-01-16 13:39:19 538

原创 OpenCloudOS 安装google浏览器

【代码】OpenCloudOS 安装google浏览器。

2024-01-12 10:15:18 100

原创 交叉编译ARM64架构electron详解

本文主要参考Electron官方文档中和在amd64环境内构建arm64的electron包。如果是arm64环境请查看文章。

2024-01-09 17:07:00 763

原创 chromium浏览器静默截图

chromium浏览器静默截图

2024-01-09 15:22:51 294

原创 arm64架构编译electron长征路

在arm64下需要构建对应架构的gn文件。源代码下载,并且切换到对应的版本。将gn源码放在src/tools/gn目录下,内容如下图。

2024-01-08 21:13:37 1156

原创 统信专业版编译electron问题总结

在执行 gn gen out/Release --args=“import(”//electron/build/args/release.gn")"过程中出现的问题。执行ninja -C out/Release electro命令时出的错误。

2024-01-07 19:17:40 1432

原创 arm64操作系统LLVM源码编译

编译electron需要对应版本的LLVM编译器,因此需要构建arm64版本的LLVM。构建过程如下。

2024-01-04 09:52:16 389

原创 C++虚函数和纯函数

允许在基类中定义通用接口,而将具体实现留给派生类。这样可以实现接口的定义和实现的分离,使得基类更加抽象和通用。进一步推动了接口和实现的分离,因为纯虚函数不提供任何默认实现,完全由派生类来实现。可以创建包含虚函数的抽象类,但它仍然可以被实例化。虚函数可以有默认实现。必须在包含纯虚函数的类中创建一个实例。它强制该类成为抽象类,不能被直接实例化。

2023-12-29 16:43:47 958

原创 统信操作系统中QWebEngine(js与C++交互)

在统信操作系统中安装qtwebchannel5-examples,当然在window中也可以下载对应的example找到qwebchannel.js查看文件路径。

2023-12-29 10:41:56 408

原创 Qt GUI 优化方案详解

使用Qt的事件过滤器,精细控制事件的传递过程。资源加载优化:分析应用启动时对资源的加载情况,包括图片、字体等,考虑采用延迟加载或异步加载等策略,以减少启动时的等待时间。识别应用中的关键资源,如图像、字体、配置文件等,采用预加载策略确保它们在需要时已经在内存中,减少运行时加载造成的延迟。是一个用于跟踪系统调用的工具,它可以捕获应用程序与内核之间的交互,帮助定位程序的问题,分析程序的行为。启动日志分析:收集并分析启动阶段的日志信息,识别潜在的性能瓶颈,包括初始化阶段的警告和错误,以及可能的优化空间。

2023-12-29 07:00:00 936

原创 交叉编译LoongArch架构下的Electron

本文打算从环境配置,获取源代码,编译,测试,使用五个方面初步描述了 LoongArch 架构下 Electron 的交叉编译。由于chromium版本更新速度极快,且对C++新特性的应用较激进,本文档使用的 clang/llvm 落后于官方所提供的版本,存在部分编译参数不兼容的问题。本文主要参考Electron官方文档中和。

2023-12-28 10:32:46 1099

原创 Qt5读取PDF文件 && PDF转图片

使用qt读取dpf文件,并且将其内容生成图片保存在本地。

2023-12-28 07:00:00 1229

原创 gn入门(Chromium)

Chromium是用gn和ninja进行编译的,即gn把.gn文件转换成.ninja文件,然后ninja根据.ninja文件将源码生成目标程序。gn和ninja的关系就与cmake和make的关系差不多。

2023-12-27 14:23:08 947

原创 chromium代码下载技巧记录

【代码】chromium代码下载技巧记录。

2023-12-27 11:24:04 401

原创 C++构建简单静态库实例(cmakelist)

C++静态库(Static Library)是一种用于代码重用和模块化开发的方式。它是一组预编译的目标文件(Object Files)的集合,这些文件通常是由源代码编译而来的。这些目标文件被打包成一个单一的文件,以便在编译链接过程中一次性链接到程序中。静态库的文件扩展名通常为.a(在Unix/Linux系统上)或.lib(在Windows系统上)。编写你的C++代码并将其编译成目标文件(.o或.obj将所有的目标文件打包成一个静态库文件。在Unix/Linux系统上,可以使用ar。

2023-12-27 10:25:46 1436

原创 dbus-monitor使用详解

是用于监视 D-Bus 系统消息总线的命令行工具。D-Bus 是一种用于在应用程序之间进行通信的消息总线系统,通常在 Linux 系统上使用。可以帮助你捕获和分析 D-Bus 消息,以便调试和了解系统中不同组件之间的通信。

2023-12-21 16:00:52 390

原创 Qt 程序获取各种文件路径方法

在上述表格中,“UserName” 和 “username” 都代表用户的实际用户名。这些路径在不同的操作系统上有相应的差异,你需要根据你的应用程序的需求选择适当的路径。此外,对于 Linux,具体的路径可能因发行版而异。是 Qt 提供的一个用于获取标准文件和目录路径的类。

2023-12-15 16:06:29 333

原创 ca-certificates.crt解析加载到nssdb中

获取证书以后使用PK11_ImportDERCert将证书导入到nssdb中。ca-certificates.crt为操作系统根证书列表。

2023-12-11 14:52:28 526

转载 Chromium 改造实录:8K 来了

此外,Chromium 自身还使用 FFmpeg 做 demuxer,对于编解码格式的判断则是由 FFmpeg 来完成,所以,对于视频解码的支持还涉及到 FFmpeg 的能力。非常欣慰的是, FFmpeg 已经合入了中国开发者的提交,支持 AVS3,对 HEVC 和 AV1 的支持更不在话下,VVC 也有支持方案,不愧为最全能的媒体库。首先取决于媒体框架的解码能力,其次,需要解除 Chromium 中的限制,并增加编码格式的支持,最后,还需要有一个好的网络环境,才能流畅的播放一部 8K 视频。

2023-12-11 07:00:00 46

转载 Chromium 改造实录:增加 MPEG TS 格式支持

这个 config 下的文件组织有些讲究,最上一层是 branding,也就是我们在 args.gn 下定义的 ffmpeg_branding 选项,默认是 Chromiium。TS 容器的 mime type 为 video/mp2t,只有开启了 enable_mse_mpeg2ts_stream_parser,才会加入对 TS 容器的处理。需要说明的是,我测试使用的 TS 流,内部视频采用的 H264 编码,如果采用其他格式编码,修改的过程会有所不同,但思路类似。没有关系,将缺的代码文件加入编译即可。

2023-12-10 07:00:00 73

转载 选择最新 Chromium,支持 H264 / H265

在做了充分的准备后,我信心满满的向着 H265 8K 视频解码这个目标发起进攻,然而,正打算动手的时候,我突然发现,别说支持 H265 ,自编的 Chromium WebView 连 H264 解码都不支持。在梳理了一遍又一遍的流程,跟踪调试了一遍又一遍的代码,两眼发花。最后需要说明一下,不能简单说 Chromium 105 之后的版本支持 H264 / H265,在 Android 上,还取决于 MediaCodec 组件的解码能力,Chromium 只是把上面的流程走通了,但实际解码还是依赖底层硬件。

2023-12-09 07:00:00 95

转载 Chromium HTML Video 媒体播放代码梳理

从 third_party/blink/ 中的 blink::HTMLMediaElement 开始,经过 content::MediaFactory 短暂跳转后到达 media::WebMediaPlayerImpl, media::WebMediaPlayerImpl 实现了 third_party/blink/public/platform/media/ 中定义的 blink:: WebMediaPlayer。这需要一点一点,耐心阅读源码。更多的时候,遇到问题,找到问题相关的源码,解决问题。

2023-12-05 13:34:07 81

转载 Chromium 改造实录:国标AVS2 & AVS3 支持起来

距离今年的五一长假只有几个小时了,一般重大节日也是项目的里程碑(milestone)节点,我也赶在五一长假之前完成了中国标准 AVS2 和 AVS3 在 Chromium 浏览器上的支持工作。有句话,“一流企业做标准,二流企业做品牌,三流企业做产品”。在这一点上,中国企业一向做得不够,在很多重要的标准制定上没有话语权,但这种情况慢慢在改进。比如在音视频领域,中国也推出了自己的超高清标准方案:AVS2 和 AVS3。

2023-12-05 13:30:22 65

原创 ERR_CERT_COMMON_NAME_INVALID出错处理办法

如果网站的SSL证书是由不被浏览器信任的、或者是自签名的CA签发的,浏览器就会提示这个错误。SSL证书通常是以证书链(Certificate Chain)的形式存在的,其中包含了网站证书、中间证书和根证书。如果你使用的是HTTPS协议,浏览器会验证网站的SSL证书,确保它的通用名称与你访问的域名匹配。如果你使用的是多域名证书(通常称为通配符证书或者Subject Alternative Name证书),确保证书上列出了你正在访问的确切域名。确保SSL证书链是完整的,包含了网站证书、中间证书和根证书。

2023-12-01 10:30:01 661

原创 Qt文件读写详解

掌握这些知识点可以让你在Qt应用程序中进行文件操作,无论是文本文件还是二进制文件,都能得心应手。在实际应用中,还可以根据需求进一步学习相关高级主题,如文件流操作、异步文件操作等。了解文件路径的表示方式(绝对路径和相对路径),以及文件名的命名规则(特殊字符、长度限制等)。在文件读写操作中,需要考虑错误处理,包括文件打开失败、写入错误等情况。可以打开、关闭文件,读取文件内容,写入文件等。用于操作文件系统中的目录,包括创建目录、删除目录、获取目录内容等。类可以方便地读取文本文件内容。类可以读取二进制文件内容。

2023-11-25 10:00:00 333

原创 Qt+xml解析

XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。用尖括号< >括起来的元素名称,例如。在标签内部提供附加信息,以键值对的形式存在,例如中的language就是一个属性。标签包裹的具体数据,例如中的 “Introduction to XML”。

2023-11-24 10:34:51 535

原创 chromium证书校验流程SM2WithSM3(C++源码说明)

证书链是一种用于验证数字证书有效性的机制,通常用于构建安全的通信通道。数字证书是一种包含公钥和相关身份信息的数据结构,由权威机构(证书颁发机构,CA)签发。证书通常用于身份验证和安全通信。证书链是由一系列数字证书构成的链条,包括终端用户的证书、中间CA的证书和根CA的证书。证书链的目的是将终端用户的证书与信任的根CA关联起来。根证书是证书链的根节点,它是由受信任的CA签发的。根证书通常预置在操作系统或浏览器中,并被视为信任的起点。中间CA证书是介于终端用户证书和根证书之间的证书。

2023-11-23 07:00:00 536

原创 QFontDialog开发详解

类是 Qt 框架中用于选择字体的对话框类。它允许用户选择字体的各种属性,如字体名称、字号、粗体、斜体等。以下是。

2023-11-22 07:00:00 371

ubuntu-20.04.6-live-server-amd64.iso.torrent

ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso ubuntu 20.04 服务器版本amd64 镜像 iso

2024-04-13

202305(第14届)蓝桥杯C++编程青少组(省赛)真题.docx

第 6 题 【 问答题 】 活动人数 时间限制: 1000MS 内存限制: 65536KB 题目描述: 编程实现:活动人数 有一个大型企业集团,由N个部门组成,编号从1到N。这些部门之间的层次关系形成了一个树状结构,一个上级部门可能会有1个或多个直接下级部门,一个下级部门只有一个直接上级部门。 本月集团举办了一个大型活动,这次的活动组织方按如下要求安排活动: 1. 来的人越多越好; 2. 如果一个上级部门参加本次活动,那么他们的直接下级部门就不能参加,而他的间接下集部门可以参加(如下图,如果部门1参加,那么部门2、3不能参加,而部门4、5、6可以参加)。 请你帮他们计算一下,如何安排可以使参加活动的人数最多,并输出参加活动的最多人数。 例如:当N=6,每个部门编号为1到6,部门上下级关系和部门的人数如下图所示: 注意:示例中,部门1是层级最高的部门,没有直接上级,故将其直接上级部门设为0; 当安排(1、4、5、6)这4个部门参加活动时,人数最多,为11,所以输出11。 输入描述 第一行输入一个正整数N(1≤N≤100000),表示集团所有部门的数量 接

2024-01-14

mysql入门教程.txt

mysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txtmysql入门教程.txt

2024-01-14

github搭建教程.txt

github搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程.txtgithub搭建教程

2024-01-14

PDF转图片实例源码png

PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码PDF转图片实例源码

2023-12-27

UsingGNbuild.pdf

GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说明文档。GNbuild详细说

2023-12-27

gn编译最小hello word实例

gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hello word实例,BUILD.gn,gn在linux操作系统中最小编译环境。 gn编译最小hell

2023-12-27

Qt自定义事件Demo

在Qt中,你可以创建自定义事件类型,以便在应用程序中传递自定义的信息。为了实现自定义事件,你需要继承自`QEvent`类,并定义你自己的事件类型。然后,你可以在需要的时候创建自定义事件对象,并将它们发送给事件接收者。以下是如何使用Qt的自定义事件的说明和示例: **使用说明:** 1. **定义自定义事件类型:** 创建一个继承自`QEvent`的子类,并在子类中添加你需要的成员变量和方法。 2. **创建自定义事件对象:** 在需要的时候,创建你自定义事件类型的对象,传入构造函数中的参数,以便在事件接收者处获取信息。 3. **发送自定义事件:** 使用`QCoreApplication::sendEvent()`或者`QCoreApplication::postEvent()`发送自定义事件对象。 4. **接收和处理自定义事件:** 在事件接收者处重载`event(QEvent *event)`函数,检查事件的类型,并根据需要处理自定义事件。

2023-10-14

Qt定时器事件Demo

在Qt中,定时器事件是一种周期性触发的事件,通常用于执行一些重复性的操作,比如更新UI、定期检查数据等。你可以使用`QTimer`类来创建定时器,并连接定时器事件的处理函数。以下是如何使用Qt的定时器事件的说明和示例: **使用说明:** 1. **创建定时器:** 使用`QTimer`类创建一个定时器对象。 2. **设置定时器参数:** 使用`setInterval()`方法设置定时器的时间间隔,以毫秒为单位。 3. **连接定时器事件处理函数:** 使用`timeout`信号连接定时器事件的处理函数。 4. **启动定时器:** 使用`start()`方法启动定时器,使其开始计时。

2023-10-14

Qt事件对象(QEvent)Demo

在Qt中,事件对象是`QEvent`或其子类的实例,用于封装事件的信息。不同的事件类型对应着`QEvent`的不同子类。你可以使用这些事件对象的方法和属性来获取事件的相关信息,例如鼠标坐标、键盘按键等。 **使用说明:** 1. **获取事件类型:** 通过`event->type()`可以获取事件对象的类型。 2. **类型转换(如果需要):** 如果你知道事件是某个特定类型的事件,可以使用`static_cast`或`dynamic_cast`将`QEvent`对象转换为相应的事件子类,以便获取更多的事件信息。 3. **获取事件属性:** 事件对象的子类通常有特定的方法或属性,用于获取事件的相关信息,例如鼠标位置、键盘按键等。

2023-10-14

Qt事件分发的Demo

在Qt中,事件分发是指当一个事件发生时,Qt系统决定应该把这个事件传递给哪个QWidget的过程。Qt中的事件分发主要通过`event(QEvent *event)`函数来实现。QWidget的所有子类都继承了`event()`函数,可以在该函数中处理不同类型的事件。 + **使用说明:** 1. **重载`event()`函数:** 在需要处理事件的QWidget子类中,可以重载`event(QEvent *event)`函数。在该函数中,你可以根据`event->type()`的值判断事件类型,并处理相应的事件。 2. **返回值:** 在`event()`函数中,你可以根据需要处理事件,并返回`true`表示事件已被处理,不再传递,返回`false`表示事件未被处理,将被传递到父组件或者进一步传递给其他子组件。

2023-10-14

Qt事件过滤器Demo

Qt事件过滤器(Event Filter)允许你在Qt应用程序中捕捉和处理事件,而无需修改原始的事件处理函数。使用事件过滤器,你可以在整个应用程序中截获和处理特定类型的事件,而不仅仅局限于单个控件。以下是Qt事件过滤器的使用说明和一个示例: + **使用说明:** 1. **安装事件过滤器:** 使用 `QObject::installEventFilter(QObject *filterObj)` 函数安装事件过滤器。这个函数将事件过滤器对象安装到指定的QObject上。 2. **重载事件过滤器函数:** 在事件过滤器类中,需要重载 `QObject::eventFilter(QObject *watched, QEvent *event)` 函数。这个函数将会在被安装事件过滤器的对象上的所有事件发生时被调用。 3. **处理特定类型的事件:** 在事件过滤器函数中,你可以通过 `event->type()` 检查事件的类型,并根据需要处理事件。

2023-10-14

QTreeWidget(树形列表框)

`QTreeWidget` 是 Qt 中用于显示树形结构的控件,每个节点可以包含子节点。以下是如何使用 `QTreeWidget` 的说明和一个简单的示例: **使用说明:** 1. **创建 QTreeWidget 对象:** ```cpp #include <QTreeWidget> ``` 2. **初始化 QTreeWidget:** ```cpp QTreeWidget *treeWidget = new QTreeWidget(this); ``` 这里创建了一个 `QTreeWidget` 控件。 3. **添加根节点:** ```cpp QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget); rootItem->setText(0, "Root Node"); ``` 使用 `QTreeWidgetItem` 类可以创建树节点,使用 `setText()` 函数可以设置节点的文本内容。 4. **添加子节点:**

2023-10-14

QListWidget(列表框)

`QListWidget` 是 Qt 中用于显示一个可选择的列表的控件,可以包含文本、图标等元素。以下是如何使用 `QListWidget` 的说明和一个简单的示例: **使用说明:** 1. **创建 QListWidget 对象:** ```cpp #include <QListWidget> ``` 2. **初始化 QListWidget:** ```cpp QListWidget *listWidget = new QListWidget(this); ``` 这里创建了一个 `QListWidget` 控件。 3. **添加条目:** ```cpp QListWidgetItem *item1 = new QListWidgetItem("Item 1"); QListWidgetItem *item2 = new QListWidgetItem("Item 2"); listWidget->addItem(item1); listWidget->addItem(item2);

2023-10-14

QTabWidget(选项卡窗口)

`QTabWidget` 是 Qt 中用于显示多个标签页的控件,每个标签页都可以包含不同的内容。用户可以通过点击不同的标签页来切换显示的内容。以下是如何使用 `QTabWidget` 的说明和一个简单的示例: **使用说明:** 1. **创建 QTabWidget 对象:** ```cpp #include <QTabWidget> ``` 2. **初始化 QTabWidget:** ```cpp QTabWidget *tabWidget = new QTabWidget(this); ``` 这里创建了一个 `QTabWidget` 控件。 3. **添加标签页:** ```cpp QWidget *page1 = new QWidget(); QWidget *page2 = new QWidget(); tabWidget->addTab(page1, "Tab 1"); tabWidget->addTab(page2, "Tab 2"); ``` 使用 `addT

2023-10-14

QDateTimeEdit(日期时间输入框)

`QDateTimeEdit` 是 Qt 中用于选择日期和时间的控件,它允许用户通过图形界面选择特定的日期和时间。以下是如何使用 `QDateTimeEdit` 的说明和一个简单的示例: **使用说明:** 1. **创建 QDateTimeEdit 对象:** ```cpp #include <QDateTimeEdit> ``` 2. **初始化 QDateTimeEdit:** ```cpp QDateTimeEdit *dateTimeEdit = new QDateTimeEdit(this); ``` 这里创建了一个 `QDateTimeEdit` 控件。 3. **设置日期和时间范围以及默认日期和时间:** ```cpp dateTimeEdit->setDateRange(QDate(2000, 1, 1), QDate(2100, 12, 31)); // 设置日期范围 dateTimeEdit->setTimeRange(QTime(0, 0, 0), QTime(23, 59, 59));

2023-10-14

QTimeEdit(时间输入框)

**使用说明:** 1. **创建 QTimeEdit 对象:** ```cpp #include <QTimeEdit> ``` 2. **初始化 QTimeEdit:** ```cpp QTimeEdit *timeEdit = new QTimeEdit(this); ``` 这里创建了一个 `QTimeEdit` 控件。 3. **设置时间范围和默认时间:** ```cpp timeEdit->setTimeRange(QTime(0, 0, 0), QTime(23, 59, 59)); // 设置时间范围 timeEdit->setTime(QTime::currentTime()); // 设置默认时间为当前时间 ``` 使用 `setTimeRange()` 函数可以设置时间的范围。使用 `setTime()` 函数可以设置默认的时间。 4. **获取选择的时间:** ```cpp QTime selectedTime = timeEdit->time();

2023-10-14

QDateEdit(日期输入框)

`QDateEdit` 是 Qt 中用于选择日期的控件,它允许用户通过图形界面选择特定的日期。以下是如何使用 `QDateEdit` 的说明和一个简单的示例: **使用说明:** 1. **创建 QDateEdit 对象:** ```cpp #include <QDateEdit> ``` 2. **初始化 QDateEdit:** ```cpp QDateEdit *dateEdit = new QDateEdit(this); ``` 这里创建了一个 `QDateEdit` 控件。 3. **设置日期范围和默认日期:** ```cpp dateEdit->setDateRange(QDate(2000, 1, 1), QDate(2100, 12, 31)); // 设置日期范围 dateEdit->setDate(QDate::currentDate()); // 设置默认日期为当前日期 ``` 使用 `setDateRange()` 函数可以设置日期的范围。使用 `setDate()` 函

2023-10-14

QProgressBar(进度条)

`QProgressBar` 是 Qt 中用于显示任务进度的控件,它可以用来展示任务的完成百分比或进度。以下是如何使用 `QProgressBar` 的说明和一个简单的示例: **使用说明:** 1. **创建 QProgressBar 对象:** ```cpp #include <QProgressBar> ``` 2. **初始化 QProgressBar:** ```cpp QProgressBar *progressBar = new QProgressBar(this); ``` 这里创建了一个 `QProgressBar` 控件。 3. **设置范围和当前值:** ```cpp progressBar->setRange(0, 100); // 设置范围为 0 到 100 progressBar->setValue(50); // 设置当前值为 50 ``` 使用 `setRange()` 函数可以设置进度条的范围,`setValue()` 函数可以设置当前的进度值。 4. **更新

2023-10-14

QSlider(滑块)Demo

`QSlider` 是 Qt 中用于选择一个数值范围内的整数值的滑动条控件。它允许用户在一个范围内滑动滑块,选择一个整数值。以下是如何使用 `QSlider` 的说明和一个简单的示例: **使用说明:** 1. **创建 QSlider 对象:** ```cpp #include <QSlider> ``` 2. **初始化 QSlider:** ```cpp QSlider *slider = new QSlider(Qt::Horizontal, this); // 水平滑动条 // 或者 // QSlider *slider = new QSlider(Qt::Vertical, this); // 垂直滑动条 ``` 这里创建了一个 `QSlider` 控件,可以选择水平或垂直方向的滑动条。 3. **设置范围和步长:** ```cpp slider->setMinimum(0); slider->setMaximum(100); slider->setSingleStep(1); /

2023-10-14

QRadioButton(单选按钮)

`QRadioButton` 是 Qt 中用于表示一组互斥的选项的单选按钮控件。它允许用户在一组选项中选择一个。以下是如何使用 `QRadioButton` 的说明和一个简单的示例: **使用说明:** 1. **创建 QRadioButton 对象:** ```cpp #include <QRadioButton> ``` 2. **初始化 QRadioButton:** ```cpp QRadioButton *radioButton1 = new QRadioButton("Option 1", this); QRadioButton *radioButton2 = new QRadioButton("Option 2", this); ``` 这里创建了两个 `QRadioButton` 控件,表示两个不同的选项。 3. **获取单选按钮的状态:** ```cpp bool isChecked = radioButton1->isChecked(); ``` 使用 `isChecked()

2023-10-14

QCheckBox(复选框)

`QCheckBox` 是 Qt 中用于表示两种状态(选中和未选中)的复选框控件。它允许用户选择或取消选择一个选项。以下是如何使用 `QCheckBox` 的说明和一个简单的示例: **使用说明:** 1. **创建 QCheckBox 对象:** ```cpp #include <QCheckBox> ``` 2. **初始化 QCheckBox:** ```cpp QCheckBox *checkBox = new QCheckBox("Check Box Text", this); ``` 这里创建了一个 `QCheckBox` 控件,同时可以指定显示的文本。 3. **获取复选框的状态:** ```cpp bool isChecked = checkBox->isChecked(); ``` 使用 `isChecked()` 函数可以获取 `QCheckBox` 的当前状态,返回 `true` 表示选中,`false` 表示未选中。 4. **处理状态变化事件:** ```cpp

2023-10-14

QComboBox(下拉框)

`QComboBox` 是 Qt 中用于显示下拉菜单的控件,用户可以从预定义的选项中选择一个。以下是如何使用 `QComboBox` 的说明和一个简单的示例: **使用说明:** 1. **创建 QComboBox 对象:** ```cpp #include <QComboBox> ``` 2. **初始化 QComboBox:** ```cpp QComboBox *comboBox = new QComboBox(this); ``` 这里创建了一个 `QComboBox` 控件。 3. **添加选项:** ```cpp comboBox->addItem("Option 1"); comboBox->addItem("Option 2"); ``` 使用 `addItem()` 函数可以添加选项。你也可以使用 `addItems()` 函数同时添加多个选项。 4. **获取当前选中的文本或索引:** ```cpp QString selectedText = comboBox

2023-10-14

QDoubleSpinBox(双精度浮点数输入框)

`QDoubleSpinBox` 是 Qt 中用于输入双精度浮点数(即小数)的控件。它允许用户通过上下箭头或手动输入的方式选择浮点数值。以下是如何使用 `QDoubleSpinBox` 的说明和一个简单的示例: **使用说明:** 1. **创建 QDoubleSpinBox 对象:** ```cpp #include <QDoubleSpinBox> ``` 2. **初始化 QDoubleSpinBox:** ```cpp QDoubleSpinBox *doubleSpinBox = new QDoubleSpinBox(this); ``` 这里创建了一个 `QDoubleSpinBox` 控件。 3. **设置范围和精度:** ```cpp doubleSpinBox->setMinimum(0.0); doubleSpinBox->setMaximum(100.0); doubleSpinBox->setSingleStep(0.1); // 设置步长为0.1 doubleSpinBox

2023-10-14

QSpinBox(数值输入框)

`QSpinBox` 是 Qt 中用于输入整数值的控件,用户可以通过上下箭头或手动输入的方式选择整数值。以下是如何使用 `QSpinBox` 的说明和一个简单的示例: **使用说明:** 1. **创建 QSpinBox 对象:** ```cpp #include <QSpinBox> ``` 2. **初始化 QSpinBox:** ```cpp QSpinBox *spinBox = new QSpinBox(this); ``` 这里创建了一个 `QSpinBox` 控件。 3. **设置范围:** ```cpp spinBox->setMinimum(0); spinBox->setMaximum(100); ``` 使用 `setMinimum()` 和 `setMaximum()` 函数可以设置 `QSpinBox` 允许的最小和最大值。 4. **获取当前值:** ```cpp int value = spinBox->value(); ``` 使用 `

2023-10-14

QTextEdit(多行文本框)

`QTextEdit` 是 Qt 中用于多行文本输入和显示的控件,允许用户输入和编辑多行文本。以下是如何使用 `QTextEdit` 的说明和一个简单的示例: **使用说明:** 1. **创建 QTextEdit 对象:** ```cpp #include <QTextEdit> ``` 2. **初始化 QTextEdit:** ```cpp QTextEdit *textEdit = new QTextEdit(this); ``` 这里创建了一个 `QTextEdit` 控件。 3. **设置文本内容:** ```cpp textEdit->setText("Default Text"); ``` 使用 `setText()` 函数可以设置 `QTextEdit` 的默认文本内容。 4. **获取文本内容:** ```cpp QString text = textEdit->toPlainText(); ``` 使用 `toPlainText()` 函数可以获取 `

2023-10-14

QLineEdit(单行文本框)

`QLineEdit` 是 Qt 中用于单行文本输入的控件。它允许用户在单行中输入和编辑文本。以下是如何使用 `QLineEdit` 的说明和一个简单的示例: + **QLineEdit 的基本用法:** 1. **创建 QLineEdit 对象:** ```cpp #include <QLineEdit> ``` 2. **初始化 QLineEdit:** ```cpp QLineEdit *lineEdit = new QLineEdit(this); ``` 这里创建了一个 `QLineEdit` 控件。 3. **设置默认文本:** ```cpp lineEdit->setText("Default Text"); ``` 你可以使用 `setText()` 函数设置 `QLineEdit` 的默认文本。 4. **获取文本内容:** ```cpp QString text = lineEdit->text(); ``` 使用 `text()` 函数可以获取 `QL

2023-10-14

QLabel(标签)Demo

`QLabel` 是 Qt 中用于显示文本或图像的控件。它可以显示纯文本、HTML 格式的文本,或者显示图像。下面是如何使用 `QLabel` 的说明和一个简单的示例: + **QLabel 的基本用法:** 1. **创建 QLabel 对象:** ```cpp #include <QLabel> ``` 2. **初始化 QLabel:** ```cpp QLabel *label = new QLabel("Hello, World!", this); ``` 这里创建了一个 `QLabel`,显示文本 "Hello, World!"。 3. **设置文本:** ```cpp label->setText("New Text"); ``` 你可以使用 `setText()` 函数设置 `QLabel` 的文本内容。 4. **显示图像:** ```cpp label->setPixmap(QPixmap("path/to/your/image.png")); ```

2023-10-14

QPushButton(按钮)

`QPushButton` 是 Qt 中用于创建按钮的类。它允许用户触发特定的操作或者执行功能。下面是如何使用 `QPushButton` 的说明和一个简单的示例: + **QPushButton 的基本用法:** 1. **创建 QPushButton 对象:** ```cpp #include <QPushButton> ``` 2. **初始化 QPushButton:** ```cpp QPushButton *button = new QPushButton("Click Me", this); ``` 这里创建了一个按钮,按钮上的文字是 "Click Me"。 3. **连接按钮的点击事件到槽函数:** ```cpp connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked())); ``` 这里使用 `connect()` 函数将按钮的 `clicked()` 信号连接到一个槽函数 `onButtonClicked()`。当

2023-10-14

表单布局(QFormLayout)

在Qt中,表单布局(`QFormLayout`)是一种常用的布局管理器,用于创建标签-字段的布局。表单布局通常用于显示标签和与之相关联的输入字段,提供一种简洁且易于阅读的界面设计。 以下是如何使用表单布局的基本步骤: + **创建表单布局:** ```cpp #include <QFormLayout> QWidget *widget = new QWidget(); QFormLayout *layout = new QFormLayout(widget); ``` 在这个例子中,我们创建了一个`QWidget`实例,然后为这个窗口部件设置了一个表单布局。 + **向表单布局中添加标签和输入字段:** ```cpp QLabel *label1 = new QLabel("Label 1:"); QLineEdit *lineEdit1 = new QLineEdit(); QLabel *label2 = new QLabel("Label 2:"); QLineEdit *lineEdit2 = new QLineEdit(); layout->addRow(l

2023-10-14

栈布局(QStackedLayout)

在Qt中,栈布局(`QStackedLayout`)是一种布局管理器,用于在同一个位置上显示一次只一个窗口部件。只有当前可见的窗口部件会被显示,其他的窗口部件会被隐藏。栈布局类似于堆栈的行为,允许你在同一区域快速切换不同的窗口内容。 以下是如何使用栈布局的基本步骤: + **创建栈布局:** ```cpp #include <QStackedLayout> QWidget *widget = new QWidget(); QStackedLayout *layout = new QStackedLayout(widget); ``` 在这个例子中,我们创建了一个`QWidget`实例,然后为这个窗口部件设置了一个栈布局。 + **向栈布局中添加窗口部件:** ```cpp QPushButton *button1 = new QPushButton("Page 1"); QPushButton *button2 = new QPushButton("Page 2"); QPushButton *button3 = new QPushButton("Page 3"); l

2023-10-14

网格布局(QGridLayout)

在Qt中,网格布局(`QGridLayout`)是一种常用的布局管理器,用于将窗口部件按行和列排列在一个二维网格中。以下是如何使用网格布局的基本步骤: + **创建网格布局:* ```cpp #include <QGridLayout> QWidget *widget = new QWidget(); QGridLayout *layout = new QGridLayout(widget); ``` 在这个例子中,我们创建了一个`QWidget`实例,然后为这个窗口部件设置了一个网格布局。 + **向网格布局中添加窗口部件:** ```cpp QPushButton *button1 = new QPushButton("Button 1"); QPushButton *button2 = new QPushButton("Button 2"); QPushButton *button3 = new QPushButton("Button 3"); layout->addWidget(button1, 0, 0); // 第一行,第一列 layout->addWidge

2023-10-14

垂直布局(QVBoxLayout)

在Qt中,垂直布局(`QVBoxLayout`)是一种常用的布局管理器,用于将窗口部件垂直排列。以下是如何使用垂直布局的基本步骤: + **创建垂直布局:** ```cpp #include <QVBoxLayout> QWidget *widget = new QWidget(); QVBoxLayout *layout = new QVBoxLayout(widget); ``` 在这个例子中,我们创建了一个`QWidget`实例,然后为这个窗口部件设置了一个垂直布局。 + **向垂直布局中添加窗口部件:** ```cpp QPushButton *button1 = new QPushButton("Button 1"); QPushButton *button2 = new QPushButton("Button 2"); layout->addWidget(button1); layout->addWidget(button2); ``` 使用`addWidget`函数,将按钮`button1`和`button2`添加到垂直布局中。这些按钮将会垂直排列,从上到

2023-10-14

水平布局(QHBoxLayout)

在Qt中,水平布局(`QHBoxLayout`)是一种常用的布局管理器,用于将窗口部件水平排列。以下是如何使用水平布局的基本步骤: + **创建水平布局:** ```cpp #include <QHBoxLayout> QWidget *widget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(widget); ``` 在这个例子中,我们创建了一个`QWidget`实例,然后为这个窗口部件设置了一个水平布局。 + **向水平布局中添加窗口部件:** ```cpp QPushButton *button1 = new QPushButton("Button 1"); QPushButton *button2 = new QPushButton("Button 2"); layout->addWidget(button1); layout->addWidget(button2); ``` 使用`addWidget`函数,将按钮`button1`和`button2`添加到水平布局中。这些按钮将会水平排列,从左到

2023-10-14

Qt自定义对话框Demo

在Qt中,你可以创建自定义对话框(Custom Dialog)来满足特定需求,这允许你设计一个完全符合应用程序风格的对话框。通常,自定义对话框是通过创建一个继承自`QDialog`的自定义类,并在这个类中定义对话框的外观和行为。 以下是如何创建自定义对话框的基本步骤: 1. **创建一个自定义对话框类:** ```cpp #include <QDialog> class CustomDialog : public QDialog { Q_OBJECT public: CustomDialog(QWidget *parent = nullptr); // 添加自定义的成员函数和变量 }; ``` 2. **在自定义对话框类的实现中,设置对话框的外观和行为:** ```cpp #include "customdialog.h" #include <QVBoxLayout> #include <QLabel> #include <QPushButton> Cust

2023-10-14

Qt模态对话框Demo

在Qt中,`QDialog` 是一个用于创建对话框的类。模态对话框(Modal Dialog)是一种阻塞式对话框,当用户与对话框交互时,阻止用户与应用程序的其他部分进行交互。在用户关闭模态对话框之前,主窗口和其他窗口将无法响应用户输入。 以下是如何创建和使用模态对话框的基本步骤: 1. **创建`QDialog`对象:** ```cpp QDialog *dialog = new QDialog(parent); ``` 这里,`parent` 是可选的,表示对话框的父窗口。 2. **设置对话框的标题和内容:** ```cpp dialog->setWindowTitle("Modal Dialog Example"); QLabel *label = new QLabel("This is a modal dialog.", dialog); ``` 3. **添加按钮或其他控件:** ```cpp QPushButton *okButton = new QPushButton("OK", dialog)

2023-10-14

QDialog 对话框Demo

QDialog` 是Qt框架中的一个类,用于创建对话框窗口。对话框是一种与用户进行简短交互、提供特定信息或执行特定任务的窗口。`QDialog` 提供了一种方便的方式来创建标准对话框,例如消息框、输入框、文件选择框等。 以下是`QDialog`的一些基本概念和特点: + **基本特点:** 1. **模态和非模态:** `QDialog` 可以是模态(Modal)或非模态(Modeless)。模态对话框阻止用户与应用程序的其他部分进行交互,直到对话框关闭。非模态对话框允许用户同时与应用程序的其他部分进行交互。 2. **布局管理:** 可以使用布局管理器(如`QVBoxLayout`、`QHBoxLayout`等)来组织对话框中的控件。 3. **内建按钮:** `QDialog` 可以包含内建的标准按钮,例如“确定”、“取消”、“应用”等。这些按钮通常用于执行常见的操作。 4. **自定义控件:** 可以将自定义的控件(例如标签、文本框、按钮等)添加到对话框中,以满足特定需求。 + **基本用法:** 1. **创建对话框:** ```cpp QDial

2023-10-14

setCentralWidget,Qt中心部件Demo

在 `QMainWindow` 中,中心部件(Central Widget)是主窗口的中间区域,通常用于显示应用程序的主要内容,例如绘图区域、文本编辑器、图形视图等。中心部件通常是一个继承自 `QWidget` 的自定义部件,但也可以是其他 `QWidget` 派生类的实例。以下是如何在 `QMainWindow` 中使用中心部件的说明和一个简单的实例讲解。 + **中心部件的使用说明:** 1. **创建中心部件:** ```cpp QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget); ``` 这里,`centralWidget` 是一个继承自 `QWidget` 的自定义部件,或者是其他 `QWidget` 派生类的实例。 2. **将控件添加到中心部件:** ```cpp QVBoxLayout *layout = new QVBoxLayout(centralWidget); QLabel *label = new QL

2023-10-14

QDockWidget,Qt停靠部件

在 `QMainWindow` 中,停靠部件(Dock Widgets)是指可以在主窗口中停靠、浮动和关闭的窗口部件。这些停靠部件通常用于显示工具、属性编辑器、文件导航器等,为用户提供更丰富的交互体验。以下是如何在 `QMainWindow` 中使用停靠部件的说明和一个简单的实例讲解。 + **停靠部件的使用说明:** 1. **创建停靠部件:** ```cpp QDockWidget *dockWidget = new QDockWidget("Dock Widget", this); ``` 这里,"Dock Widget" 是停靠部件的标题。 2. **设置停靠部件的内容:** ```cpp QWidget *dockWidgetContent = new QWidget(dockWidget); dockWidget->setWidget(dockWidgetContent); ``` 在 `dockWidgetContent` 中添加你需要的控件,例如按钮、标签等。 3. **将停靠部件添加到主窗口:**

2023-10-14

QStatusBar,Qt状态栏

在 `QMainWindow` 中,状态栏(Status Bar)是一个用于显示应用程序状态信息、提示信息和用户交互的底部区域。状态栏通常用于向用户提供反馈、进度信息或一般性的应用程序状态。以下是如何在 `QMainWindow` 中使用状态栏的说明和一个简单的实例讲解。 + **状态栏的使用说明**: 在 `QMainWindow` 中,你可以通过以下步骤在状态栏上添加标签、消息和控件: 1. **创建状态栏:** `QStatusBar` 类通常已经作为 `QMainWindow` 的一部分存在,你可以使用 `statusBar()` 函数来获取当前的状态栏对象。 2. **添加标签或消息到状态栏:** ```cpp statusBar()->showMessage("Ready", 3000); // 在状态栏上显示消息,持续时间为3秒 ``` 3. **在状态栏上添加控件:** ```cpp QLabel *statusLabel = new QLabel("Status Label", this); statusBar

2023-10-14

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除