QT C++开发知识点剖析
一、QWidget、QDialog,QMainWindow 区别
通俗易懂的区分
QWidget 是积木
QDialog 是弹窗
QMainWindow 是房子
1.1、QWidget ——「最基础的积木」
(1)通俗理解
QWidget 就是一块界面积木,按钮是QWidget,输入框是QWidget,一个页面也是QWidget。
只要能显示在屏幕上的东西,基本都是QWidget。
没有父窗口 → 它就是一个独立窗口
有父窗口 → 它就是窗口里的一个控件
它既能当“窗口”,也能当“控件”
(2)总结
QWidget = 万能界面零件
1.2、QDialog ——「专门干一件事的弹窗」
(1)通俗理解
QDialog 就是弹出来让你做一件事的窗口,通常用于:登录,参数设置,文件选择等。
分为模态和非模态状态
模态对话框:你不把这个弹窗处理完,别的都不能点(登录窗口、参数设置、文件选择)
非模块对话框:弹出来,但你还能继续用主界面(帮助窗口等)
它既能当“窗口”,也能当“控件”
(2)总结
QDialog = 办完事就走的弹窗或者提示窗口
1.3、QMainWindow ——「应用程序的主房子」
(1)通俗理解
QMainWindow 就是整个程序的主壳子,通常具备:菜单栏,工具栏,状态栏等。
(2)总结
QMainWindow = 正式应用程序的主框架
1.4、对比
| 类名 | 理解 | 典型用途 |
| QWidget | 积木 | 页面、模块 |
| QDialog | 弹窗 | 登录、设置 |
| QMainWindow | 房子 | 主界面 |
二、GroupBox添加布局和窗体添加布局的区别
通俗易懂的区分
GroupBox只管自己内部(也就是局部)
窗体管全局
2.1、布局的功能
当窗口大小变化时,自动调整控件大小和位置,包括控件之间的间距、对齐等,从而保持整个界面的美观。
当没有布局时:控件绝对位置和大小不随窗口变化而变化,一旦拉伸窗口,会很丑。
2.2、GroupBox添加布局
对象:GroupBox 内部
它只负责:GroupBox 里面的控件怎么排
GroupBox 的布局不会影响窗口整体结构,当更改GroupBox 大小时,其内部组件都会自动改变大小。但是当改变窗体大小时,界面上的各组件却并不会自动改变大小。
2.3、窗体添加布局
对象:centralWidget / Form
它负责的是:整个窗口的总布局,与主窗口想比,其它控件均可以看做积木。最终负责二级积木的排版。
为窗体指定一个总的布局(即窗体布局),这样布局后,当窗体大小改变时,各个组件都会自动改变大小。
三、addLayout和addWidget的区别
3.1、通俗易懂理解
addWidget = 往布局里放“控件”。
addLayout = 往布局里放“布局”。
3.2、区别
| 项目 | addWidget | addLayout |
|---|---|---|
| 添加对象 | 控件(按钮、输入框等) | 布局(水平/垂直/网格) |
| 类型 | QWidget | QLayout |
| 作用 | 显示UI元素 | 组织UI结构 |
| 是否能嵌套 | ❌ 不能 | ✅ 可以(关键) |
3.3、代码示例
3.3.1、addWidget
QVBoxLayout *layout = new QVBoxLayout;
QPushButton *btn1 = new QPushButton("按钮1");
QPushButton *btn2 = new QPushButton("按钮2");
layout->addWidget(btn1);
layout->addWidget(btn2);
通过addWidget将两个按钮控件加入定义的垂直布局layout。
3.3.2、addLayout
QVBoxLayout *mainLayout = new QVBoxLayout;
QHBoxLayout *subLayout = new QHBoxLayout;
QPushButton *btn1 = new QPushButton("按钮1");
QPushButton *btn2 = new QPushButton("按钮2");
subLayout->addWidget(btn1);
subLayout->addWidget(btn2);
mainLayout->addLayout(subLayout);
先通过addWidget将两个按钮加入水平子布局subLayout,然后将子布局添加到主布局mainLayout。
四、QTextDocument和QTextBlock的区别
4.1、通俗易懂理解
QTextDocument = 整篇文档(整本书)
QTextBlock = 一段文本(一行 / 一个段落)
4.2、区别
| 对比项 | QTextDocument | QTextBlock |
|---|---|---|
| 层级 | 整体 | 局部 |
| 类比 | 一本书 | 一段话 |
| 管理范围 | 所有内容 | 单个段落 |
| 是否多个 | 只有一个 | 有很多 |
| 获取方式 | textEdit->document() | document->firstBlock() |
| 作用 | 管结构 | 遍历/处理每一行 |
4.3、例子
4.3.1、QTextDocument
本质:整个文本内容的容器(整个word文档,记事本全文)
QTextDocument *doc = ui->textEdit->document();//定义一个QTextDocument容器doc,从UI界面的txetEdit控件中获取全部内容
doc->toPlainText(); // 获取全文
doc->setPlainText(); // 设置全文
doc->find("abc"); // 查找
4.3.2、QTextBlock
本质:按 Enter 分开的每一行,文档中的一个段落
QTextBlock block = doc->firstBlock();//定义一个QTextBlock未block,获取doc全文中的第一段
for (QTextBlock block = doc->firstBlock();
block.isValid();
block = block.next())
{
qDebug() << block.text();
}
//文本
Hello
World
Qt
//
//内部结构如下
//QTextDocument
├── QTextBlock("Hello")
├── QTextBlock("World")
└── QTextBlock("Qt")
//
//
qDebug结果
Hello
World
Qt
//
五、addItem和addItems的区别
5.1、通俗易懂理解
addItem = 加一个
addItems = 一次加多个
5.2、适用对象
QComboBox(下拉框)
QListWidget
QStandardItemModel(类似概念)
5.3、代码示例
5.3.1、addItem
//在下拉框中逐次添加内容“表1”、“表2”、“表3”//
comboBox->addItem("表1");
comboBox->addItem("表2");
comboBox->addItem("表3");
5.3.2、addItems
//定义一个QStringlist,将 "表1"、"表2"、"表3"逐次添加入list,然后运用addItems将包含多个内容的list添加入下拉栏//
QStringList list;
list << "表1" << "表2" << "表3";
comboBox->addItems(list);
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)