QT学习之 QWidget、QDialog、QMainWindow的区别

QT学习之 QWidget、QDialog、QMainWindow的区别

在Qt框架中,QWidget、QDialog和QMainWindow是三个核心窗口类,它们的主要区别在于用途和功能结构:

  1. QWidget(基础窗口控件)
    定位:所有窗口控件的基类(QDialog和QMainWindow都继承自它)。
    功能:
    可作为独立的顶级窗口(无父控件),或嵌入其他窗口作为子控件。
    默认无菜单栏、工具栏、状态栏等组件。
    支持自定义布局、事件处理、绘制等基础功能。
    典型场景:
    自定义控件(如按钮、标签)。
    简单的弹出窗口。
    作为其他窗口的容器(例如QMainWindow的中心部件)。
    示例:

cpp
#include <Qapplication>
#include <QWidget>
#include <QmainWindow>
#include <Qdialog>
#include <Qlabel>
#include <QPushButton>
int main(int argc,char* argv[])
{
	//创建应用程序
	QApplication app(argc,argv);
	//创建父窗口
	QWidget parent; 
	//QDialog parent;
	//QMainWindow parent;
	
	parent.move(500,400);
	parent.resize(300,150);
 
	//创建标签组件
	QLabel label("我是标签组件",&parent);
	label.move(80,30);
	label.resize(140,30);
	
	//创建确认按钮
	QPushButton bntOK("确认",&parent);
	bntOK.move(35,90);
	bntOK.resize(100,30); 
	
	//创建取消按钮
	QPushButton *bntCancle = new QPushButton("取消",&parent);
	bntCancle->move(165,90);
	bntCancle->resize(100,30);
	
	parent.show();
	
	app.exec();
}

  1. QDialog(对话框窗口)
    定位:专为对话框设计的子类(继承自QWidget)。

功能:

支持模态(阻塞父窗口)和非模态(独立运行)两种模式。

提供标准按钮布局(如 Ok/Cancel),通过 QDialogButtonBox 管理。

内置返回值机制(如 accept() 和 reject() 信号)。

典型场景:

设置窗口(如“首选项”)。

消息提示框(QMessageBox 是其子类)。

文件选择对话框(QFileDialog)。

示例:

#include <Qapplication>
#include <QWidget>
#include <QmainWindow>
#include <Qdialog>
#include <Qlabel>
#include <QPushButton>
int main(int argc,char* argv[])
{
	//创建应用程序
	QApplication app(argc,argv);
	//创建父窗口
	//QWidget parent; 
	QDialog parent;
	//QMainWindow parent;
	
	parent.move(500,400);
	parent.resize(300,150);
 
	//创建标签组件
	QLabel label("我是标签组件",&parent);
	label.move(80,30);
	label.resize(140,30);
	
	//创建确认按钮
	QPushButton bntOK("确认",&parent);
	bntOK.move(35,90);
	bntOK.resize(100,30); 
	
	//创建取消按钮
	QPushButton *bntCancle = new QPushButton("取消",&parent);
	bntCancle->move(165,90);
	bntCancle->resize(100,30);
	
	parent.show();
	
	app.exec();
}

  1. QMainWindow(主应用程序窗口)
    定位:为主窗口设计的子类(继承自QWidget),提供完整的应用框架。

功能:

内置菜单栏(menuBar())、工具栏(addToolBar())、状态栏(statusBar())。

中心区域(setCentralWidget())用于放置核心控件。

支持停靠窗口(addDockWidget())。

典型场景:

应用程序的主界面(如IDE、文本编辑器)。

需要复杂布局和多组件协同的窗口。

示例:

#include <Qapplication>
#include <QWidget>
#include <QmainWindow>
#include <Qdialog>
#include <Qlabel>
#include <QPushButton>
int main(int argc,char* argv[])
{
	//创建应用程序
	QApplication app(argc,argv);
	//创建父窗口
	//QWidget parent; 
	//QDialog parent;
	QMainWindow parent;
	
	parent.move(500,400);
	parent.resize(300,150);
 
	//创建标签组件
	QLabel label("我是标签组件",&parent);
	label.move(80,30);
	label.resize(140,30);
	
	//创建确认按钮
	QPushButton bntOK("确认",&parent);
	bntOK.move(35,90);
	bntOK.resize(100,30); 
	
	//创建取消按钮
	QPushButton *bntCancle = new QPushButton("取消",&parent);
	bntCancle->move(165,90);
	bntCancle->resize(100,30);
	
	parent.show();
	
	app.exec();
}

在这里插入图片描述

如何选择?
需要主界面(含菜单/工具栏) → QMainWindow。

需要弹窗(设置/消息) → QDialog。

需要自定义控件或简单窗口 → QWidget。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

拥有阳光拥有爱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值