【GUI组件类框架---窗口部件(Widgets)】

目录

一、基础窗口类

QMainWindow、QDialog、QWidget对比

1.QWidget:是所有窗口控件的基类

2.QMainWindow:是主程序的大窗口(软件的主界面)

centralWidget

3.QDialog:弹窗对话框

如何选择?

二、布局管理

布局管理器 QLayout

原理

优点

缺点

3. 核心冲突

三、按钮类

QPushButton、QRadioButton、QCheckBox

四、文本输入

QLineEdit、QTextEdit、QPlainTextEdit

五、列表视图

QListWidget、QTreeWidget、QTableWidget

六、容器类

QGroupBox、QTabWidget、QScrollArea


一、基础窗口类

QMainWindow、QDialog、QWidget对比

1.QWidget:是所有窗口控件的基类

特点:

  1. 最轻量,没有内置菜单栏,工具栏,控制栏;
  2. 可以当独立窗口(show()),也能嵌入其他窗口,适合小型的简易页面

创建:Widget w; w.show();

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // 1. 创建顶层窗口,根容器就是QWidget
    QWidget w;
    w.setWindowTitle("纯QWidget窗口");
    w.resize(300, 200);

    // 2. 创建子控件
    QLabel *label = new QLabel("这是QWidget基础窗口", &w);
    QPushButton *btn = new QPushButton("点击测试", &w);

    // 3. 垂直布局,把控件放入窗口
    QVBoxLayout *layout = new QVBoxLayout(&w);
    layout->addWidget(label);
    layout->addWidget(btn);

    // 按钮点击槽函数
    QObject::connect(btn, &QPushButton::clicked, [=](){
        qDebug() << "按钮被点击";
        label->setText("你点了按钮!");
    });

    // 显示窗口
    w.show();
    return a.exec();
}

2.QMainWindow:是主程序的大窗口(软件的主界面)

它继承自QWidget,是完整主窗口框架,专门做软件首页

内置专属布局结构(独有):

┌───────────────────── 菜单栏 menuBar
├───────────────────── 工具栏 toolBar
├───────────────────── 中心窗口 centralWidget(必须放你的界面控件)
├───────────────────── 停靠窗口 dockWidget
└───────────────────── 状态栏 statusBar

适用场景:编辑器、绘图软件、播放器、管理系统这类大型程序主界面

强制规则:必须给它设置 centralWidget,否则控件无法显示

centralWidget

它是一个中间区域承载控件的容器,他的本质就是一个普通的 QWidget,作为中间布局的根容器,你的所有 UI 控件(按钮、输入框、布局)都要放在它里面。

两种使用方式:

  1. 可视化拖拽:新建 MainWindow 工程时,软件会自动生成一个 centralWidget,你拖拽所有控件到界面上,全部放在这个中心部件里,不用手动写代码。
  2. 代码手动创建
// 1. 创建主窗口
QMainWindow w;

// 2. 创建中心容器
QWidget *central = new QWidget();
// 给中心部件设置布局
QVBoxLayout *lay = new QVBoxLayout(central);
lay->addWidget(new QPushButton("测试按钮"));

// 3. 把容器设置给主窗口的 centralWidget
w.setCentralWidget(central);

w.show();

3.QDialog:弹窗对话框

专门做弹窗,提示框,二级弹出页面

特点:

  1. 默认带(确认/取消按钮),如果窗口弹出,无法操作父窗口;
  2. 没有菜单栏,工具栏,状态栏;
  3. 两种模式:
    1. 模态 exec():卡住主线程,必须关弹窗才能操作主界面;
    2. 非模态 show():弹窗和主窗口可同时操作

适用场景:登录弹窗、确认提示、设置窗口、文件选择框

自带便捷的子类QMessageBox消息框、QFileDialog文件选择器,都属于 Dialog 体系


如何选择?

如果你想写小工具,简易的页面(计算器)--->直接用QWidget

如果你想做软件主界面,需要菜单栏,工具栏,底部状态文字 --->QMainWindow

如果点击按钮可以弹出一个小窗口(登录/确认/参数设置)--->QDialog

二、布局管理

布局管理器 QLayout

Qt 内置常用布局:

  1. QHBoxLayout 水平布局:控件从左到右横向依次排列

  2. QVBoxLayout 垂直布局:控件从上到下纵向依次排列

  3. QGridLayout 网格布局:表格形式多行多列摆放

  4. QFormLayout 表单布局:标签 + 输入框成对布局(登录界面常用)

原理

布局自动接管所有子控件:

窗口拉伸时,布局自动分配空间,自动调整控件位置与大小,自适应窗口

优点

  1. 窗口缩放,界面自动适配;

  2. 不需要手动写坐标,代码简洁;

  3. 支持控件间距、边距、拉伸比例设置。

缺点

不能随心所欲把控件摆到任意坐标,遵循排列规则。

3. 核心冲突

一个控件不能同时使用布局 + 绝对定位

  • 父控件设置布局 → 布局接管子控件几何信息,setGeometry() 无效

  • 如果想要 setGeometry() 生效:不能给父控件布置局

三、按钮类

QPushButton、QRadioButton、QCheckBox

四、文本输入

QLineEdit、QTextEdit、QPlainTextEdit

五、列表视图

QListWidget、QTreeWidget、QTableWidget

六、容器类

QGroupBox、QTabWidget、QScrollArea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值