Qt中的窗口类及其特点

目录

常用的窗口类

窗口的显示内嵌窗口

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窗口也只有不内嵌窗口,但是他可以有菜单栏,工具栏和状态栏。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小梁今天敲代码了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值