Qt中的窗口类及其特点

news2024/12/22 22:35:30

目录

常用的窗口类

窗口的显示内嵌窗口

QWidget内嵌窗口演示

 QWidget不内嵌窗口演示

 QDialog类型的窗口特点

 QMainWindows窗口的特点

 总结

常用的窗口类

  • 常用的窗口类有 3 个
    • 在创建 Qt 窗口的时候,需要让自己的窗口类继承上述三个窗口类的其中一个
  • QWidget
    • 所有窗口类的基类
    • Qt 中的控件 (按钮,输入框,单选框…) 也属于窗口,基类都是 QWidget
    • 可以内嵌到其他窗口中:没有边框
    • 可以不内嵌单独显示:独立的窗口,有边框
  • QDialog
    • 对话框类,后边的章节会具体介绍这个窗口
    • 不能内嵌到其他窗口中
  • QMainWindow
    • 有工具栏,状态栏,菜单栏
    • 不能内嵌到其他窗口中

窗口的显示内嵌窗口

在常见的窗口类中,出现了“内嵌”这个词,那么什么是内嵌,什么是不内嵌呢?

  • 内嵌窗口

    • 依附于某一个大的窗口,作为了大窗口的一部分
    • 大窗口就是这个内嵌窗口的父窗口
    • 父窗口显示的时候, 内嵌的窗口也就被显示出来了
  • 不内嵌窗口

    • 这类窗口有边框,有标题栏

    • 需要调用函数才可以显示

QWidget内嵌窗口演示

我们先添加一个新文件

 选择Qt模板-Qt设计器界面类

 界面模板Widget

 创建类名:

点击完成: 

 

 此时我们发现项目中出现了关于TestWidget的他偶文件,源文件和界面文件

在testwidget.ui界面文件中拖拽几个Button按钮,方便演示

 在mainwindow.cpp源文件中创建窗口对象,并给其指定父对象(explicit TestWidget(QWidget *parent = nullptr);在testwidget.h中包含,C++多态)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "testwidget.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //一般在qt的构造函数中进行初始化操作(窗口,数据。。。)
    //explicit TestWidget(QWidget *parent = nullptr);
    //如果创建一个窗口对象的时候给其指定了父对象,这个窗口就不是一个独立窗口
    //这样的话当前父窗口显示的时候,子窗口就一并被显示出来了,这个时候子窗口是没有边框的
    TestWidget* w =new TestWidget(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

 此时运行程序,发现testwidget.ui界面在MainWindow大窗口中显示

 QWidget不内嵌窗口演示

将mainwindow.cpp中代码改为以下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "testwidget.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //一般在qt的构造函数中进行初始化操作(窗口,数据。。。)
    //显示当前窗口的时候,显示另外一个窗口 Testwidget
    //创建窗口对象,没有给w对象指定父对象,这个窗口是一个独立窗口
    //要显示这个独立窗口必须要进行show()操作
    TestWidget* w =new TestWidget;
    //显示当前窗口
    w->show();

}

MainWindow::~MainWindow()
{
    delete ui;
}

 

 运行结果:

 QDialog类型的窗口特点

创建Dialog类型的窗口时,大致步骤与Widget窗口类似,在选择界面模板的时候进行更改即可,我们这里选择的是Dialoh without Buttons模板

 在testdialog.ui界面中布置一些按钮用来演示

 在mainwindow.cpp中加入Dialog.ui界面(非模态)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "testwidget.h"
#include "testdialog.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //一般在qt的构造函数中进行初始化操作(窗口,数据。。。)
    //显示当前窗口的时候,显示另外一个窗口 Testwidget
    //创建窗口对象,没有给w对象指定父对象,这个窗口是一个独立窗口
    //要显示这个独立窗口必须要进行show()操作
    TestWidget* w =new TestWidget;
    //显示当前窗口
    w->show();
    //创建对话框窗口
    TestDialog* dlg = new TestDialog(this);
    //非模态
    dlg->show();
}
MainWindow::~MainWindow()
{
    delete ui;
}

 运行结果:

  在mainwindow.cpp中加入Dialog.ui界面(模态)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "testwidget.h"
#include "testdialog.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //一般在qt的构造函数中进行初始化操作(窗口,数据。。。)
    //显示当前窗口的时候,显示另外一个窗口 Testwidget
    //创建窗口对象,没有给w对象指定父对象,这个窗口是一个独立窗口
    //要显示这个独立窗口必须要进行show()操作
    TestWidget* w =new TestWidget;
    //显示当前窗口
    w->show();
    //创建对话框窗口
    TestDialog* dlg = new TestDialog(this);
    //模态,exec()
    //阻塞程序的执行
    dlg->exec();
}
MainWindow::~MainWindow()
{
    delete ui;
}

 运行结果:

 这种模态的方式创建窗口,会阻塞程序的执行,我们现在只能够显示两个子窗口,并且不能够切换其他窗口,在关闭掉Dialog窗口后,主窗口会显示出来,并且可以切换窗口

 QMainWindows窗口的特点

在mainwindows.ui界面的右侧有一个编辑框

它里面显示了其他两周窗口没有的状态栏,菜单栏,工具栏(工具栏可以有多个,状态栏和菜单栏只能有一个) 

在我们添加了状态栏(s),菜单栏(m),工具栏(t)之后,ui界面会进行对应的显示

 总结:

        本文介绍了Qt的三个窗口类,并简要说明了它们的区别,QWidget窗口有内嵌窗口和不内嵌窗口之分,而QDialog窗口只有不内嵌窗口,但又有模态和非模态之分,QMainWindow窗口也只有不内嵌窗口,但是他可以有菜单栏,工具栏和状态栏。

 

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

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

相关文章

增量数据抽取技术

写在前面 本文隶属于专栏《大数据从 0 到 1》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见《大数据从 0 到 1》 正文 在数据仓库中要实现增量抽取&#x…

STL-string-1

stoi int stoi (const string& str, size_t* idx 0, int base 10);int stoi (const wstring& str, size_t* idx 0, int base 10); Convert string to integer 解析str,将其内容解释为指定基数的整数,该整数作为int值返回。 如果idx不是空…

QLoRa:在消费级GPU上微调大型语言模型

大多数大型语言模型(LLM)都无法在消费者硬件上进行微调。例如,650亿个参数模型需要超过780 Gb的GPU内存。这相当于10个A100 80gb的gpu。就算我们使用云服务器,花费的开销也不是所有人都能够承担的。 而QLoRa (Dettmers et al., 2023)&#x…

公司裁员不给赔偿怎么办?

阅读本文大概需要 1.61 分钟。 最近在星球回答球友问题的时候,发现不少人都提到裁员这个话题。 有球友说他们公司在裁员,但不想给赔偿。 领导给他的方案是把年假调休休了,然后再给三周找工作时间,这三周不用打卡,三周后…

茅塞顿开的C#代码——通用型科学计算器

计算器是经常遇到的编程作业。 一般都是实现加、减、乘、除四则运算的普通计算器。 这里介绍用几十行C#代码实现的复杂的《科学计算器》,可以计算各种函数。 不知道其他语言实现同样的功能需要编写多少行代码?20000行? using System; usin…

SpringBoot接口如何正确地接收时间参数

唠嗑部分 在做Java开发时,肯定会碰到传递时间参数的情况吧,比如用户的出生日期、活动的开始,结束日期等等,这些参数往往是由前端传递过来的,那么在SpringBoot项目中,该如何正确的接收日期参数呢&#xff0…

如果不小心上了电信黑名单,应该怎么妥善处理呢?

有些小伙伴们在处理不用的手机卡时,可能会粗心大意,认为不用了就用不了呗,存在欠费停机的情况下也没有及时的去补交欠费,然后销户,导致了自己不小心上了电信黑名单,那遇到这种情况,应该怎么妥善…

论文解读 | 利用图形卷积核在距离图像中实现高效的3D目标检测

原创 | 文 BFT机器人 01 摘要 该论文提出了一种基于范围图像的高效3D物体检测方法,通过利用图卷积核来提取每个像素周围的局部几何信息。 作者设计了一种新颖的2D卷积网络架构,并提出了四种替代内积核心的卷积核,以注入所需的三维信息。该方法…

GPT最常用的应用场景有哪些?

生成式预训练转换器(GPT)是一种深度学习模型,它能够根据给定的提示生成类似人类的文本,彻底改变了自然语言处理(NLP)领域。 聊天机器人和虚拟助手 GPT最受欢迎的应用程序之一是开发聊天机器人和虚拟助手。凭…

【Python 自然语言处理(NLP)】零基础也能轻松掌握的学习路线与参考资料

Python 自然语言处理(NLP)是目前人工智能(AI)发展中的重要领域。随着科技的不断进步,NLP已经被应用于文本自动摘要、机器翻译、语音识别、情感分析、问答系统等各项实际任务中。 要学习 Python 自然语言处理&#xff…

“河南省数字化转型与信息技术应用创新专家研讨会-政府数字化转型推动信创产业发展”专场活动成功召开

由《中国信息化》杂志社主办的“2023河南省数字化转型与信息技术应用创新专家研讨会——政府数字化转型推动信创产业发展”专场活动于5月27日,在郑州成功举办。本次活动由深圳竹云科技股份有限公司协办,由河南省测绘学会、中国信息主管平台支持。中国交通…

Windows 安装部署 MinIo

1、下载地址 安装包下载地址:https://min.io/download#/windows 2、安装目录 下载的是一个可执行文件 minio.exe 将其放到一个方便寻找的目录,我这里放在 D:\develop\minio 同时新建一个 data 文件夹,用来存储上传的文件 3、启动 MinIo 服…

Godot引擎 4.0 文档 - 第一个 3D 游戏

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Your first 3D game — Godot Engine (stable) documentation in English 你的第一个 3D 游戏 在这个循序渐进的教程系列中,您将使用 Godot 创建您的第一…

Java程序设计入门教程 -- 二维数组

二维数组创建 定义数组 声明二维数组 Java中二维数组的声明格式: 数据类型名[ ][ ] 数组名; 或 数据类型名 数组名[ ][ ]; 分配数组内存 常用格式: new 数组名[ M][N ] ; //M,N为数组行号和列号 分配数组内存 1)规…

chatgpt赋能python:Python的几次方符号介绍

Python的几次方符号介绍 当我们在使用Python编程时,经常需要进行数学计算。其中最常见的计算就是幂运算。Python使用幂运算符号来表示一个数的几次方。这个符号既可以用在数字之间,也可以用在变量之间。在本文中,我们将介绍Python中的几次方…

堆基础1_小白垃圾笔记

小白垃圾笔记,不建议阅读。 目录 1.什么是堆? 2.堆从哪里来? 3.堆管理器是什么 4.堆申请的实现方式 1.brk:brk仅仅主线程申请小空间的时候用,子线程不可调用brk。 2.mmap:主线程申请大的内存的时候和…

Mysql小知识 delete 清空表之后,磁盘空间未发生变化?

1. 删除空洞 1.1 案例展示 首先我们先来看这样一个例子。 我现在有一个名为 sakila 的数据库,该库中有一个 film 表,这个表中有 1000 条记录,我么先来看下这 1000 条记录占用了多少存储空间: 小伙伴们可以看到,这个…

Go-FastDFS 本地对象存储,Windows环境搭建(下载安装教程)!

文章目录 Go-FastDFS简介与地址下载安装服务与管理端台可视化测试 Go-FastDFS简介与地址 go-fastdfs 是一个基于 http 协议的分布式文件系统! 它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性…

Elasticsearch:使用带有 X-Opaque-Id 的慢速查询功能在 Elasticsearch 中调试慢速查询

如果你在软件堆栈中使用 Elasticsearch,你可能已经意识到 Elasticsearch 管理大量数据和提供实时搜索功能的强大能力。 了解 Elasticsearch 中的慢速查询 Slow Log 是 Elasticsearch 的内置功能,可用于识别慢速搜索。 任何花费时间超过预期的请求都会记…

Paper reading: Conditional Diffusion for Interactive Segmentation ICCV2021

交互式语义分割 We propose Conditional Diffusion Network (CDNet), which propagates labeled representations from clicks to conditioned destinations with two levels of affinities: Feature Diffusion Module (FDM) spreads features from clicks to potential targ…