Qt窗口及QWidget类详解

2024-05-09 03:20
文章标签 详解 qt 窗口 qwidget

本文主要是介绍Qt窗口及QWidget类详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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类与位置相关的函数

这篇关于Qt窗口及QWidget类详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972250

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2