当前位置: 首页 > news >正文

QT学习笔记(常用控件)

QT 学习笔记

一、QT GUI 类继承体系

QObject(基类)
└── QWidget(所有可视化控件基类)
    ├── QAbstractButton(按钮类基类)
    │   ├── QPushButton
    │   ├── QRadioButton
    │   └── QCheckBox
    ├── QFrame(带边框控件基类)
    │   └── QLabel
    ├── QLayout(布局管理器基类)
    └── 其他控件类...

核心类说明:

  1. QObject:所有QT对象的基类,提供信号槽机制
  2. QWidget:所有可视化控件的基类,包含坐标、尺寸等基础属性
  3. QLayout:布局管理抽象类,派生出具体布局管理器

二、布局管理器

常用布局类型

布局类型描述
QVBoxLayout垂直排列控件(上下布局)
QHBoxLayout水平排列控件(左右布局)
QGridLayout网格状布局
QFormLayout表单式布局(标签+输入)

使用要点

cpp

// 示例:创建垂直布局
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(new QPushButton("Button1"));
layout->addWidget(new QLineEdit);
setLayout(layout);  // 应用到窗口

三、输入输出控件

输出控件

  • QLabel:文本/图片显示
  • QProgressBar:进度条
  • QLCDNumber:数字显示屏

输入控件

控件类型用途
QLineEdit单行文本输入
QTextEdit多行富文本编辑
QSpinBox数字输入(带上下箭头)
QComboBox下拉选择框

四、按钮类控件

常用按钮类型

  1. QPushButton:标准按钮
  2. QRadioButton:单选按钮(需配合QButtonGroup)
  3. QCheckBox:多选按钮
  4. QToolButton:工具栏按钮

按钮状态控制

cpp

QPushButton *btn = new QPushButton("Submit");
btn->setEnabled(false);  // 禁用按钮
btn->setIcon(QIcon(":/icon.png"));  // 设置图标

五、容器类控件

常用容器

  • QGroupBox:带标题的分组框
  • QTabWidget:标签页容器
  • QScrollArea:可滚动区域
  • QStackedWidget:堆叠式容器(多页面切换)

容器使用示例

cpp

QTabWidget *tabs = new QTabWidget;
tabs->addTab(new QTextEdit, "Document");  // 添加页面
tabs->setCurrentIndex(0);  // 设置默认页

六、信号与槽机制

核心概念

  • 信号(Signal):事件触发的信号(如按钮点击)
  • 槽(Slot):接收信号后执行的函数

连接方式

cpp

// 传统连接语法
connect(btn, SIGNAL(clicked()), this, SLOT(onClick()));

// Qt5+新语法(推荐)
connect(btn, &QPushButton::clicked, this, &MyClass::onClick);

// Lambda表达式连接
connect(btn, &QPushButton::clicked, [=](){
    qDebug() << "Button clicked!";
});

七、核心编程思想

  1. 对象树机制:父子对象自动管理内存
  2. 跨平台特性:一次编写,多平台编译运行
  3. MVC模式:数据-视图分离设计(适用于复杂控件)

学习建议

  1. 优先掌握QWidget的常用属性和方法
  2. 熟练使用Qt Designer进行界面设计
  3. 理解信号槽的线程安全机制
  4. 多参考Qt Assistant官方文档

相关文章:

  • 多语言语料库万卷·丝路2.0开源,数据模态全面升级,搭建文化交流互鉴AI桥梁
  • JAVA中数组(Array)‌ 和 ‌链表(LinkedList)‌ 是两种基础的数据结构
  • 解锁应急管理新境界:AR眼镜与指挥平台的完美融合
  • 系统与网络安全------网络应用基础(1)
  • 【极速版 -- 大模型入门到进阶】GPT + Gradio 聊天机器人从 0 到 1
  • 【第23节】windows网络编程模型(WSAEventSelect模型)
  • A2 最佳学习方法
  • SpringBoot事务原理剖析
  • 力扣刷题-热题100题-第23题(c++、python)
  • 股指期权最后交易日是哪一天?
  • tortoiseSVN、source insignt、J-flash使用
  • 算法 | 蜣螂优化算法原理,引言,公式,算法改进综述,应用场景及matlab完整代码
  • C语言笔记(鹏哥)上课板书+课件汇总(动态内存管理)--数据结构常用
  • 在fedora41中使用最新版本firefox和腾讯翻译插件让英文网页显示中文翻译
  • package-lock.json能否直接删除?
  • Java 集合 List、Set、Map 区别与应用
  • vue 一个组件的开发,引出组件开发流程和知识点
  • 职坐标:互联网行业职业发展路径解析
  • CSS 相对复杂但实用的margin
  • 手动创建Electron+React项目框架(建议直接看最后)
  • 上海112位全国劳动模范和先进工作者接受表彰,樊振东榜上有名
  • 专业竞演、剧场LIVE直播,32位越剧新星逐梦上海
  • 独家丨申万宏源研究所将迎来新所长:首席策略分析师王胜升任
  • 2025年上海空间信息大会举行,重大项目集中签约
  • 谢震业、梁小静等名将在列,世界田联接力赛中国队名单出炉
  • 王毅会见乌兹别克斯坦外长赛义多夫