Qt中的窗口类及其特点

news/2024/7/5 7:58:58

目录

常用的窗口类

窗口的显示内嵌窗口

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://lihuaxi.xjx100.cn/news/1197891.html

相关文章

【是德出品,必属精品】示波器探头的11个误解

误解1. 100 MHz 的“信号”,使用 100 MHz 的示波器探头。 示波器探头带宽与配合它们使用的示波器带宽采用相同的方法进行规定,即产品响应的 -3dB 点。举例来说,如果使用 100 MHz 带宽的探头测量 100 MHz 1Vpp 正弦波,那么探头输出…

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不是空…

视频美颜sdk是什么?技术解析与实现原理详解

视频美颜技术的发展则为人们提供了一种美化自己的方式,因此,视频美颜技术成为了一个备受关注的领域。在这个领域中,视频美颜sdk技术则是实现高效美颜的关键因素之一。本文将从技术角度分析视频美颜sdk的实现原理和优势。 一、视频美颜技术的…

虚拟现实 VR 智慧办公室可视化

“虚拟现实”是来自英文“Virtual Reality”,简称 VR 技术,其是通过利用计算机仿真系统模拟外界环境,主要模拟对象有环境、技能、传感设备和感知等,为用户提供多信息、三维动态、交互式的仿真体验。 图扑软件基于自研可视化引擎 H…

onnx模型转 ncnn 模型全连接层输出shape不对问题解决

1.简述 最近在把paddleocr 中cls分类模型通过ncnn部署框架部署时,发现onnx -> ncnn 模型的转换过程中出现问题。因为之前的项目都是使用ncnn框架部署的,只能去解决模型转换问题了。 2. 问题描述与分析 模型在onnx推理代码上正常,当把模型…

绝地求生 压q python版

仅做学习交流,非盈利,侵联删(狗头保命) 一、概述 1.1 效果 总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。 1.2 前置知识 游戏中有各种不同的q械&#xf…

这本数智平台白皮书讲透了大型企业数智化升级业务痛点

在以“升级企业数智化底座”为主题的2023用友BIP技术大会上,用友联合全球权威咨询机构IDC共同发布《建设数字中国 升级数智底座——企业数智化底座白皮书》,在这本数智平台白皮书里深入剖析了大型企业的数智化升级痛点。 大型企业普遍具有广域的业务覆盖…

什么是DAS/SAN/NAS

先上图 DAS DAS(Direct-attached Storage) 直连存储,这种存储设备通常是一个磁盘阵列柜,里面有多块磁盘,但不带RAID功能。 它与服务器主机之间的连接通常采用SCSI或者FC连接。DAS只能连接一台服务器,其它服务器无法共享该存储。 …