目录
常用的窗口类
窗口的显示内嵌窗口
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窗口也只有不内嵌窗口,但是他可以有菜单栏,工具栏和状态栏。