07-常用控件:输入、列表、对话框¶
目录页:见 Qt 教程目录
目标¶
- 会用三类最常用控件:输入框、列表、下拉选择
- 会弹出对话框:提示框、确认框、选择文件
- 能做一个最小“待办清单”界面:输入 → 加到列表 → 删除
先决知识(可选)¶
- 会用布局搭一个小界面(见 05 章)
- 理解信号与槽(见 04 章)
1. 输入控件:把用户的字拿到手¶
1.1 QLineEdit:单行输入框¶
- 专业名称:QLineEdit
- 类比:一条可以编辑的“输入条”
- 作用:输入用户名、关键词、路径等
- 规则/坑点:用
text()取文本;需要限制输入时用 validator 或 inputMask
最常用动作:
- lineEdit->text():取当前文本
- lineEdit->setText(...):设置文本
- lineEdit->setPlaceholderText(...):灰色提示
1.2 QPlainTextEdit / QTextEdit:多行文本¶
- 类比:多行输入区(聊天框/日志/备注)
- 新手结论:需要纯文本就用 QPlainTextEdit,富文本才用 QTextEdit
2. 列表与选择:把很多项展示出来¶
2.1 QListWidget:最简单的列表¶
- 专业名称:QListWidget
- 类比:一张“条目清单”
- 作用:快速展示与选择一堆字符串项
- 规则/坑点:适合简单数据;复杂数据后面会用 Model/View(进阶再讲)
2.2 QComboBox:下拉选择¶
- 类比:可展开的下拉菜单
- 作用:从预设选项里选一个
- 规则/坑点:选择变化用
currentIndexChanged
3. 对话框:和用户“弹窗说话”¶
3.1 QMessageBox:提示/确认¶
- 专业名称:QMessageBox
- 类比:系统弹窗的“标准模板”
- 作用:提示错误、确认删除
- 规则/坑点:提示信息要明确,不要只写“error”
3.2 QFileDialog:选文件/选目录¶
- 类比:打开资源管理器让用户点选
- 作用:让用户选择文件路径
- 规则/坑点:返回空字符串表示用户取消
4. 最小可用例子:待办清单(可运行)¶
功能: - 输入框输入一行文字 - 点击 Add 加到列表 - 选中某一项后点击 Remove 删除(删除前弹确认框)
#include <QApplication>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QListWidget>
#include <QMessageBox>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget w;
w.setWindowTitle("Todo Demo");
auto *root = new QVBoxLayout(&w);
auto *row = new QHBoxLayout;
auto *input = new QLineEdit;
auto *add = new QPushButton("Add");
auto *remove = new QPushButton("Remove");
auto *list = new QListWidget;
input->setPlaceholderText("type something...");
row->addWidget(input);
row->addWidget(add);
row->addWidget(remove);
root->addLayout(row);
root->addWidget(list);
QObject::connect(add, &QPushButton::clicked, &w, [=] {
QString t = input->text().trimmed();
if (t.isEmpty()) {
return;
}
list->addItem(t);
input->clear();
});
QObject::connect(remove, &QPushButton::clicked, &w, [=] {
auto *item = list->currentItem();
if (!item) {
return;
}
auto r = QMessageBox::question(&w, "Confirm", "Remove selected item?");
if (r == QMessageBox::Yes) {
delete item;
}
});
w.resize(520, 360);
w.show();
return app.exec();
}
常见坑¶
-
错误:删除列表项后继续使用旧指针
结果:崩溃或访问无效内存
正确:delete item后不要再用它;需要的话重新currentItem()获取 -
错误:没处理用户取消对话框
结果:逻辑误删/误操作
正确:QMessageBox/QFileDialog 的返回值要判断
小练习¶
练习 1:双击编辑¶
- 题目:双击列表项弹输入框修改内容
- 输入/输出:修改后列表项文字更新
- 约束:必须用对话框/输入框,不要新开窗口
- 提示:可以用
QInputDialog::getText(你需要自己查一下头文件并加入工程) - 目标:练“从 UI 获取输入再更新 UI”
练习 2:保存与加载(预告资源/文件)¶
- 题目:把 todo 列表保存为文本文件,每行一条;启动时可加载
- 输入/输出:save 生成文件,load 读取回来
- 约束:文件路径由 QFileDialog 选择
- 提示:用 QFile + QTextStream
- 目标:练文件对话框与基本 I/O
小结¶
- QLineEdit 负责输入,QListWidget 负责展示列表,QComboBox 负责选择
- QMessageBox 用来提示/确认,QFileDialog 用来选文件/目录
- 把输入→处理→更新界面这条链练熟,你就能做很多小工具
下一篇:见 08-绘制基础-QPainter画图与自定义控件