112.Qt中的窗口类

        我们在通过Qt向导窗口基于窗口的应用程序的项目过程中倒数第二步让我们选择跟随项目创建的第一个窗口的基类, 下拉菜单中有三个选项, 分别为: QMainWindow、QDialog、QWidget如下图:

常用的窗口类有3个
在创建Qt窗口的时候, 需要让自己的窗口类继承上述三个窗口类的其中一个。

一、 QWidget类

QWidget是Qt框架中所有用户界面对象的基类。它提供了一种用于创建窗口和其他可视化元素的基础机制。以下是QWidget类的一些关键特性和常用方法:

特性:

  1. 父子关系: QWidget支持层次结构,可以通过设置父对象来组织窗口和控件。

  2. 绘制和事件处理: QWidget有一些虚拟函数,比如paintEvent,可以被子类重写以实现自定义的绘制和事件处理逻辑。

  3. 布局管理: QWidget可以包含布局管理器,用于自动管理子控件的位置和大小。

  4. 样式表: 通过使用样式表(类似于CSS),可以定制QWidget及其子类的外观。

  5. 焦点: QWidget支持焦点管理,可以接收焦点并处理键盘事件。

  6. 大小和位置: QWidget可以设置大小和位置,并且有一些方法用于获取和设置这些属性。

二、QDialog类 

QDialog类是Qt框架中用于创建对话框的基类。对话框是一个独立的窗口,通常用于执行特定任务、显示信息、或者收集用户输入。QDialog提供了一些默认的对话框行为,同时也允许开发者通过继承并定制其行为。

以下是QDialog类的一些特性和常用方法:

特性:

  1. 按钮框架(Button Box): QDialog通常包含一个按钮框架,用于容纳标准的对话框按钮(如确定、取消、应用等),这可以通过QDialogButtonBox来实现。

  2. 返回结果: 对话框可以返回一个结果,例如用户的选择或输入,通过调用QDialog::exec()来模态显示对话框,并根据用户的操作返回相应的结果。

  3. 大小调整: 对话框可以自动根据内容调整大小,也可以手动设置大小。

  4. 模态和非模态: 对话框可以以模态或非模态的方式显示。模态对话框阻止与应用程序的其他部分的交互,直到对话框关闭。

三、QMainWindow类 

QMainWindow类是Qt框架中用于创建主窗口的基类。主窗口通常包含菜单栏、工具栏、状态栏等,是应用程序的主界面。QMainWindow提供了一些默认的主窗口布局和行为,同时也允许开发者通过继承和定制来创建自定义的主窗口。

以下是QMainWindow类的一些特性和常用方法:

特性:

  1. 菜单栏、工具栏和状态栏: QMainWindow包含了方便的方法来设置和管理菜单栏、工具栏和状态栏。可以使用menuBar()toolBar()statusBar()方法来获取对应的对象。

  2. 中心窗口区域: QMainWindow提供了一个中心区域,可以通过setCentralWidget()方法设置为主窗口的中心显示区域。

  3. Dock窗口: 可以通过QDockWidget类将可停靠的窗口添加到主窗口的周围,提供更灵活的布局。

  4. 布局管理: QMainWindow支持布局管理器,可以通过setCentralWidget()setDockWidgetArea()等方法来配置窗口的布局。

  5. 状态保存和还原: QMainWindow能够保存和还原窗口的状态,包括窗口的位置、大小、布局等信息。

  6. 文档/模式视图: 支持文档/模式视图架构,可以在主窗口内管理多个文档或视图。

示例代码:mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "testwidge.h"
#include "testdialog.h"
#include "QPushButton"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建第一个按钮,让这个按钮作为当前创建的子控件QPushButton* btnA=new QPushButton(this);//移动按钮位置btnA->move(10,10);//给按钮设置固定大小btnA->setFixedSize(200,200);//创建第二个按钮,让这个按钮作为当前创建的子控件QPushButton* btnB=new QPushButton(btnA);//移动按钮位置btnB->move(10,10);//给按钮设置固定大小btnB->setFixedSize(100,100);//创建第三个按钮,让这个按钮作为当前创建的子控件QPushButton* btnC=new QPushButton(btnB);//移动按钮位置btnC->move(10,10);//给按钮设置固定大小btnC->setFixedSize(50,50);//创建窗口对象,没有给w对象指定父对象,这个窗口是一个独立窗口//要显示这个独立窗口必须要进行show()操作TestWidge* w=new TestWidge;//显示当前窗口w->show();
/*//一般在qt的构造函数中进行初始化操作(窗口,数据,...)//显示当前窗口的时候,显示另外一个窗口TestWidget
#if 0//创建窗口对象,没有给w对象指定父对象,这个窗口是一个独立窗口//要显示这个独立窗口必须要进行show()操作TestWidge* w=new TestWidge;//显示当前窗口w->show();
#else//创建窗口对象,没有给w对象指定父对象//explicit TestWidge(QWidget *parent = nullptr);//如果创建一个窗口对象的时候给其指定了父对象,这个窗口就不是一个独立窗口//这样的话当前父窗口显示的时候,子窗口就一并被显示出来了//这时候子窗口是没有边框的TestWidge* w=new TestWidge(this);
#endif#if 0//创建对话框窗口TestDialog *dlg=new TestDialog(this);//非模态dlg->show();
#else//创建对话框窗口TestDialog *dlg=new TestDialog(this);//模态,需调用这个函数exec(),阻塞程序的执行dlg->exec();
#endif
*/}MainWindow::~MainWindow()
{delete ui;
}

 

四、两个窗口类

在Qt中,有两个常见的窗口类型:Form窗口和MainWindow窗口。

Form窗口(QWidget):

QWidget是Qt中所有可视化组件的基类,它可以用于创建简单的窗口或者作为其他窗口组件的基础。Form窗口通常不包含菜单栏、工具栏、状态栏等主窗口元素,而是被用于容纳其他控件。

特性:

  • 不包含默认的菜单栏、工具栏或状态栏。
  • 适合用于创建自定义的对话框或简单的窗口。
  • 使用QWidget可以自由设计窗口的外观和布局。

MainWindow窗口(QMainWindow):

QMainWindow是用于创建主窗口的类,它包含了许多常见的主窗口元素,如菜单栏、工具栏、状态栏等。MainWindow窗口通常是应用程序的主界面,用于承载整个应用程序的主要功能。

特性:

  • 包含默认的菜单栏、工具栏和状态栏。
  • 适合用于创建典型的桌面应用程序的主窗口。
  • 支持文档/模式视图结构,可以管理多个文档或视图。

在实际的应用程序中,可以根据需要选择使用QWidget还是QMainWindow。如果你需要创建一个简单的窗口或者对话框,可能选择使用QWidget。而如果你的应用程序需要具备主窗口的标准结构,包括菜单、工具栏和状态栏等,那么使用QMainWindow更为合适。

 五、坐标体系

在Qt中,坐标体系(Coordinate System)是用来定位和描述界面上元素位置的一种方式。Qt使用的坐标体系是二维平面上的笛卡尔坐标系,其中原点通常位于左上角,x轴向右延伸,y轴向下延伸。

在Qt中,窗口的相对坐标通常指的是相对于其父窗口或者相对于屏幕的坐标。这是在布局和界面设计中经常会遇到的概念,尤其是当一个窗口嵌套在另一个窗口中时。

//创建第一个按钮,让这个按钮作为当前创建的子控件QPushButton* btnA=new QPushButton(this);//移动按钮位置btnA->move(10,10);//给按钮设置固定大小btnA->setFixedSize(200,200);//创建第二个按钮,让这个按钮作为当前创建的子控件QPushButton* btnB=new QPushButton(btnA);//移动按钮位置btnB->move(10,10);//给按钮设置固定大小btnB->setFixedSize(100,100);//创建第三个按钮,让这个按钮作为当前创建的子控件QPushButton* btnC=new QPushButton(btnB);//移动按钮位置btnC->move(10,10);//给按钮设置固定大小btnC->setFixedSize(50,50);

这是一个使用Qt框架创建按钮的示例代码,其中按钮之间形成了父子关系。

  1. 创建第一个按钮 btnA

    • QPushButton* btnA = new QPushButton(this); 创建一个按钮,并将其父对象设置为当前窗口(this)。
    • btnA->move(10, 10); 将按钮的位置移动到 (10, 10)。
    • btnA->setFixedSize(200, 200); 设置按钮的固定大小为 200x200 像素。
  2. 创建第二个按钮 btnB

    • QPushButton* btnB = new QPushButton(btnA); 创建一个按钮,并将其父对象设置为第一个按钮 btnA。这样,btnB 成为了 btnA 的子控件。
    • btnB->move(10, 10); 将按钮 btnB 相对于其父对象 btnA 的位置移动到 (10, 10)。
    • btnB->setFixedSize(100, 100); 设置按钮 btnB 的固定大小为 100x100 像素。
  3. 创建第三个按钮 btnC

    • QPushButton* btnC = new QPushButton(btnB); 创建一个按钮,并将其父对象设置为第二个按钮 btnB。这样,btnC 成为了 btnB 的子控件,同时也是 btnA 的孙子控件。
    • btnC->move(10, 10); 将按钮 btnC 相对于其父对象 btnB 的位置移动到 (10, 10)。
    • btnC->setFixedSize(50, 50); 设置按钮 btnC 的固定大小为 50x50 像素。

这样,创建了一个包含三个按钮的父子关系层次结构。按钮 btnC 是按钮 btnB 的子控件,同时也是按钮 btnA 的孙子控件。控件之间的父子关系在布局、显示和事件处理等方面都具有重要意义。

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

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

相关文章

设计模式——解释器模式

更多内容,前往IT-BLOG 在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的表达式(例如:正则表达式等),那么这些问题实例将是该表达式的一些句子…

科技创新领航 ,安川运动控制器为工业自动化赋能助力

迈入工业4.0时代,工业自动化的不断发展,让高精度运动控制成为制造业高质量发展的重要技术手段。北京北成新控伺服技术有限公司作为一家集工业自动化产品销售、系统设计、开发、服务于一体的高新技术企业,其引进推出的运动控制产品一直以卓越的…

基于Selenium+Python的web自动化测试框架

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…

海量数据处理数据结构之Hash与布隆过滤器

前言 随着网络和大数据时代的到来,我们如何从海量的数据中找到我们需要的数据就成为计算机技术中不可获取的一门技术,特别是近年来抖音,快手等热门短视频的兴起,我们如何设计算法来从大量的视频中获取当前最热门的视频信息呢&…

Windows下上帝模式的实现

在windows系统上有个特殊模式,那就是上帝模式,几乎包含了windows中所有的快捷方式,有很多小伙伴还不知道,让我们一起来实现这一操作吧! 一、首先新建一个文件夹 二、接着将文件夹重命名,命名为以下代码&am…

考试面试轻松应对:技术人的备考宝库 | 开源专题 No.58

yangshun/tech-interview-handbook Stars: 97.9k License: MIT 这个项目是一个技术面试手册,提供了免费和精选的技术面试准备材料。它包括最佳实践问题、编码面试的常见问题、如何准备编程面试以及算法小抄等内容。该项目的核心优势和主要功能有: 提供…

楼宇管理新智慧:Panorama SCADA楼宇管理系统应用实例

一、背景介绍 楼宇管理系统旨在集中控制和监测楼宇运营,涵盖暖通空调(HVAC)、照明、电力系统、消防和安全系统等。通过直观的用户界面,用户得以实时监测和精准掌控这些系统,从而提升能源效率、确保设备正常运行&#…

PyCharm社区版如何创建Django项目并运行

一、配置Django环境 1、使用PyCharm打开一个普通的Python项目 2、为该项目配置Django环境 (1)点击"File"-"Settings" (2)点击"Project:项目名"-"Python Interpreter"-"号" &…

联手英特尔,释放星飞分布式全闪存储潜能

近日,英特尔官网发布了与 XSKY 星辰天合联手打造的解决方案,即 XSKY 的新一代全闪分布式存储系统 XINFINI,该存储系统采用英特尔 QAT 加速数据压缩/解压缩,从而大幅度提升存储系统性能。 全闪存储系统面临的解压缩挑战 在存储系统…

创建EasyCodeMybatisCodeHelperPro模板文件用于将数据库表生成前端json文件

在intellij idea中,通过插件EasyCodeMybatisCodeHelperPro,从现有的模板文件中选择一个复制粘贴,然后稍为修改,即可得到一个合适的模板文件。 现在的前端,越来越像后端。TypeScript替代了JavaScript,引入了…

LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

题目描述: 解题思路: 创建两个栈,一个用于入数据,一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据,先检查popST中有无数据,如果有数据,就直接出。如果没…

Java--Spring项目生成雪花算法数字(Twitter SnowFlake)

文章目录 前言步骤查看结果 前言 分布式系统常需要全局唯一的数字作为id,且该id要求有序,twitter的SnowFlake解决了这种需求,生成了符合条件的这种数字,本文将提供一个接口获取雪花算法数字。以下为代码。 步骤 SnowFlakeUtils …

Linux Ubuntu 20.04.6 Intel WiFi6 Ax411 1690i Ax1690i Killer 解决无线网卡识别不出来问题

项目场景: 网卡型号:英特尔 Killer™ Wi-Fi 6E AX1690 i/s ubuntu 版本 uname -a Linux kuanli 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux cat /proc/version Linux version 5.15.0-9…

docker 部署项目的操作文档,安装nginx

目录 1 部署环境检查2 相关知识点2.1 docker默认镜像存放地址2.2 docker 的镜像都是tar 包?2.3 Docker-compose 是直接使用镜像创建容器?2.4 Docker Compose down 就是将容器删除?2.5 删除,会删除挂载嘛2.6 DockerFile 和 docker …

Visual Studio 新特性:对 include 指令进行智能诊断

今天,我们很高兴地宣布新功能:#include 语言智能诊断。 此功能自 Visual Studio 2022 v17.9 预览版2 中可用。通过此新功能,您可以获取到有关每个 include 的引用和生成时间的详细信息,从而更好地了解 #include 指令的行为。 &g…

git仓库操作之一:git仓库修改名称

1 先修改“Project name"方法如下: 2 再修改“下载地址和下载后的项目名称”方法如下: 这样就修改完成了。

PhpPythonC++圆类的实现(OOP)

哎......被投诉了 😭😭😭😭😭 其实也不是小编不更,这不是期末了吗(zhaojiekou~~),而且最近学的信息收集和ctf感觉好像没找到啥能更的(不过最经还是在考虑更一…

JAVA销售数据决策管理系统源码

JAVA销售数据决策管理系统源码 基于BS(Extjs Strus2springhibernate Mysql)的销售数据的决策支持 主要的功能有 系统功能具体内容包括基础资料、进货管理、出货管理、库存管理、决策分析、系统管理。

活水计划丨改善老年营养,促进老年健康

在中国乡村发展基金会、腾讯公益的支持下,1月10日上午辉县义工联合共济医院,在我市易地搬迁佳怡社区开展“乐伴银龄 社区共建”项目——“老年常见病健康知识讲座”活动。 通过制作宣传横幅、发放科普手册等方式,为协同推进健康中国和积极应对…

《AI基本原理和python实现》栏目介绍

一、说明 栏目《AI基本原理和python实现》的设计目的是为了实现相关算法的python编程。因为用python实现AI需对相关的python库进行全方位了解,本栏目基本包含了【机器学习】相关的经典算法,除此之外还包括了数据分析、时间序列等一些概念和相关python代码…