Qt窗口及QWidget类详解

news/2025/1/16 9:15:53/

QtWidgets 模块及窗口基本概念

QWidget 类是所有用户界面对象的基类,QWidget 及其子类是开发桌面应用的核心,这些类都位于 QtWidgets 模块内,注意:QtWidgets 是模块,QWidget 是类(少一个字母 t 和最后的 s)。

部件或窗口部件:Qt 把建立用户界面的元素称为窗口部件(widget),简称部件,比如:主窗口、对话框、按钮、标签等在 Qt 中都称为部件。

窗口没有嵌入到其他部件中的部件被称为窗口,通常来说窗口是没有父部件的部件(也可以有父部件),因此窗口又被称为顶级部件,与其相对的非窗口部件,称为子部件。窗口通常含有边框和标题栏(当然也可以没有这些)。窗口若有父部件,则在父级被删除时删除。QDialog 和 QMainWindow 部件,默认为窗口,即使在构造函数中为其指定父部件,仍是窗口。窗口通常会显示在任务栏上。

容器:放置其他部件的部件被称为容器,注意,容器可以嵌入到其他部件(即容器可以有父部件),而窗口则不能。

窗口和窗口部件在 Qt 中是两个不同的概念,为避免引起混乱,以后把窗口部件统称为部件。

若一个部件是另一个部件的父对象,则子部件的边界会完全的位于父部件的边界内部。

Qt 中大部分部件都是用作子部件的,比如标签、按钮等。经常被用作窗口的部件是QMainWindow 和 QDialog 的各个子类

Qt 使用枚举 Qt::WindowType 对部件的类型进行描述,比如该部件是否是窗口,是否是子窗口,是否是对话框,是否拥有菜单栏等。

Qt 每个部件的构造函数都会接受一个或两个标准的如下形式的参数,也就是说 QWidget 类及其子类的构造函数都会有如下形式的一个或两个形参
1) *QWidget parent =0

  • 作用:该参数用于指定此部件的父部件,若为 0(默认值),则表示此部件没有父部件,
    因此是一个窗口。
    2)Qt::WindowFlags f=0
  • 语法解析:Qt 是一个 C++名称空间, WindowFlags 类型是使用 C++语法的typedef 重命名后的类型,其最终结果的语法为
typedef QFlags<WindowType> WindowFlags
  • WindowType:是一个枚举类型,参数 f 的取值必须是 WindowType 的成员,该枚举类型拥有众多的成员,这些不同的成员决定了部件的不同外观和类型,其语句原型大约如下:
enum WindowType {Widget,Window,Dialog,Sheet,...,WindowType_Mask}
  • WindowFlags:是类型 QFlags,这种类型是枚举类型所对应的标志,该类型之所以能接收枚举类型 WindowType 的值,是因为在 QFlags 中有一个单形参构造函数,这里列出其简化后的形式为 QFlags(QFlags f){…},注:单形参构造函数可用于类型转换(这是 C++语法)。
  • QFlags:是 Qt 中内置的模板类,其主要作用是为枚举值及其组合运算提供类型安全的算法,这意味着,在给参数 f 指定值时,必须是类型正确的枚举值,否则就会发生错误。组合运算是指在枚举值之间进行按位与、或等运算。
  • 作用设置部件的标志,用于设置部件的类型及其外观。默认情况下,其值为Qt::Widget,表示若部件没有父部件,则就是子部件,否则就是窗口。若标志取值为 Qt::Window,则此时无论该部件是否有父部件,都表示该部件是一个窗口,也就是说在这种情况下,该部件可以是一个有父部件的窗口(这是个例外)。
  • 注意:使用标志和枚举的不同之处在于,若函数的参数是标志,则意味着实参可以是多个按位“或”的枚举类型值,若函数的参数是枚举,则只能指定该枚举类型的单个值,不能使用按位“或”运算符。

Qt::WindowType 枚举常见取值如下:

  • Qt::Widget:QWidget 构造函数的默认值,表示若部件没有父部件,则就是子部件,否则就是窗口;
  • Qt::Window:此时无论该部件是否有父部件,都表示该部件是一个窗口,也就是说在这种情况下,该部件可以是一个有父部件的窗口(例外情形),通常该窗口会有标题栏、边框等;
  • Qt::Dialog:该部件是一个对话框,这是 QDialog 构造函数的默认值。对话框通常没有最大化和最小化按钮,这是与窗口的区别
  • Qt::Popup:该部件是一个弹出式顶层窗口;
  • Qt::SplashScreen:该部件是一个欢迎窗口,这是 QSplashScreen 构造函数的默认值;
  • Qt::Desktop:该部件是个桌面窗口,这是 QDesktopWidget 构造函数的默认值;
  • Qt::CoverWindow:该部件是一个封面窗口,通常用于在程序最小化时显示该窗口。

QWidget类介绍

QWidget 类描述了部件的基本信息,由该类创建的部件在外观上是一个最简单的部件,它看起来是一个空的窗口,QWidget 类通常用于创建一个窗口。QWidget 类非常复杂,该类包含一百多个函数,子类化 QWidget 类或其子类就可以创建自已的窗口部件。Qt 的所有UI 元素都是 QWidget 类的子类或与 QWidget 子类一起使用。

任何没有父母的 QWidget 都将成为一个窗口,在大多数平台上都会列在桌面的任务栏中。通常应用程序只需要一个窗口即主窗口。

QWidget类属性讲解图如下:


http://www.ppmy.cn/news/1458752.html

相关文章

Java Jackson-jr 库使用介绍

介绍 Jackson-jr 是一个轻量级的Java JSON 处理库。这个库被设计用来替代 Jackson 的复杂性。对比 Jackson 的复杂 API&#xff0c;Jackson-jr 的启动速度更快&#xff0c;包大小更小。 虽然Jackson databind&#xff08;如ObjectMapper&#xff09;是通用数据绑定的良好选择…

Begin 版本:2023/01/11 知更鸟WordPress主题优化版

主题下载地址&#xff1a;Begin主题优化版.zip 适用于博客、新闻、公司、图片、小说、文档、商城、资源下载、网址导航等多种类型网站

Nuxt3路由跳转

学习这篇文章之前&#xff0c;需要具备使用Nuxt3框架搭建基础项目 ,如果有这个基础可以跳过.直接看下面的声明式路由跳转 声明式路由跳转 创建两个基础文件 ~/pages/index.vue 和 ~/pages/About.vue ⚠️一定要是index.vue不能够大写Index.vue&#xff0c; 否则报错. <!--…

刷题训练之模拟

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握模拟算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题训…

度小满——征信报告图建模

目录 背景介绍 发展趋势 技术演进 图在金融风控领域中的演进 度小满图机器学习技术体系 案例 征信报告介绍 征信报告图建模

英特尔StoryTTS:新数据集让文本到语音(TTS)表达更具丰富性和灵感

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 英特尔StoryTTS&#xff1a;新数据集让文本到语音&#xff08;TTS&#xff09;表达更具丰富性和灵感 引言&#xff1a;探索文本表达性在语音合成中的重要性 …

el-dialog设置el-head固定

0 效果 1 代码 ::v-deep .adTextDetailDialogClass .el-dialog__body{max-height: calc(100vh - 150px);overflow: auto;border-top:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf; } ::v-deep .adTextDetailDialogClass .el-dialog{position: fixed;height:fit-content;…

【Linux】进程间通信方式之管道

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误的话&#xff0c;还望指出&…