4. 控件学习2

QLineEdit 单行文本框

QLineEdit(单行文本框)用于一行信息的输入。老师代码里的完整流程:创建 → setFixedSize 定大小 → move 定位 → setPlaceholderText 提示 → setMaxLength 限长 → setAlignment 对齐。

  • setFixedSize(w, h):固定大小,用户拖不动窗口缩放时该控件也不变(区别于 resize 只是设置一次大小)。

  • setEchoMode(QLineEdit::Password):密码模式,输入显示为圆点。

  • setPlaceholderText("请输入密码"):框内没输入时显示的灰色提示文字。

  • setMaxLength(6):最多输入 6 个字符。

  • setAlignment(Qt::AlignHCenter):内容水平居中(默认左对齐)。

  • setReadOnly(true):只读不可编辑。

  • setText() 填充、clear() 清空、text() 读取。

复制代码
 edit = new QLineEdit(this);              // 创建单行文本框
 edit->setFixedSize(200, 30);             // 固定大小:宽200 高30
 edit->move(100, 100);                    // 定位
 edit->setPlaceholderText("请输入密码");   // 灰色提示文字
 edit->setEchoMode(QLineEdit::Password);  // 密码模式(圆点)
 edit->setMaxLength(6);                   // 最多6个字符
 edit->setAlignment(Qt::AlignHCenter);    // 内容水平居中

textChanged(QString):任何文本改变(含 setText() 触发)。

textEdited(QString):仅用户编辑造成改变(setText() 不触发)。

editingFinished():编辑结束(回车或失去焦点)时发出,用 text() 取内容------适合"输完再处理"的场景。

QTextEdit 多行文本编辑框

常用方法

QTextEdit(多行文本编辑框)用于显示和编辑多行文本。核心三个写入方法:setPlainText()(整体替换为纯文本)、append()(末尾追加)、insertHtml()/insertPlainText()(插入 HTML/纯文本)。读取用 toPlainText()。

setPlainText() 是"替换"不是"追加"------连续调用两次,第二次覆盖第一次

读内容用 toPlainText()(返回 QString)。

显示 HTML 富文本用 insertHtml() 或 setHtml()。

复制代码
 edit = new QTextEdit(this);     // 创建多行文本框
 edit->resize(500, 500);         // 设置大小
 ​
 edit->setPlainText("haha");   // 整体替换 → 内容 "haha"
 edit->setPlainText("hhhh"); // 再替换 → 覆盖成 "hhhh"
 edit->append("hello");          // 末尾追加 → "hhhh\nhello"
 ​
 QString all = edit->toPlainText();  // 读取全部内容
QComboBox 下拉框

QComboBox(下拉框)除了显示文字,还能给每一项附带一个数据:addItem("陕西", 33) 第二参数是用户数据(可以是 int、QString 等)。取值用 currentText()(当前文字)和 currentData()(当前项附带的数据,用 .toInt() 等转换)。

addItem(text) 或 addItem(text, data);addItems(QStringList) 一次加多个(无数据)。

currentText() 取当前文字,currentData().toInt() 取当前项数据。

currentIndex() 当前索引(0 开始)、itemText(i) 取指定索引文字、setCurrentIndex(i) 设当前项、count() 项数、clear() 清空、setEditable(true) 可手动输入。

常用信号:currentTextChanged(QString)(选择变化时发射,带新文字)

复制代码
 com = new QComboBox(this);
 com->setGeometry(100, 100, 100, 30);
 ​
 com->addItem("陕西", 33);        // 文字+附带数据33
 com->addItem("河南", 55);
 QStringList lst;
 lst << "内蒙古" << "新疆";
 com->addItems(lst);              // 一次加多个(无数据)
 ​
 // 选择变化时触发,参数str就是当前选中文字
 connect(com, &QComboBox::currentTextChanged, this,
         [this](QString str){ qDebug() << str; });
 // 读取:当前文字 + 当前数据
 qDebug() << com->currentText() << com->currentData().toInt();

附带数据的作用

  • 文字可能因国际化(多语言)而变化,但数据 ID 不变。

  • 文字可能重复(比如两个"李华"),用数据能唯一确定。

QListWidget 列表框

QListWidget(列表框)显示一列条目。条目是 QListWidgetItem(列表项)对象:可单独创建后设文字/图标再加入,也可 addItem("文字") 直接加。常用信号 itemClicked(QListWidgetItem*) 点击时发射,参数是被点的项。

添加两种方式:addItem("陕西")(直接加文字);QListWidgetItem *item = new QListWidgetItem(lst); item->setText("河南"); item->setIcon(QIcon(...));(创建项对象再设置)。

点击信号 itemClicked(QListWidgetItem *item) 用 item->text() 取文字。

currentItem()->text() 取当前选中项文字、currentRow() 取当前行号。

删除当前项:takeItem(currentRow())------从列表取走(删除)当前行。

复制代码
 lst = new QListWidget(this);
 lst->setGeometry(100, 100, 60, 200);
 lst->addItem("陕西");            // 直接加文字项
 lst->addItem("甘肃");
 ​
 QListWidgetItem *item = new QListWidgetItem(lst);  // 创建项对象
 item->setIcon(QIcon("d:\\1.png"));  // 设图标
 item->setText("河南");           // 设文字
 lst->addItem(item);              // 加入列表
 ​
 // 点击某项时触发,item是点中的项
 connect(lst, &QListWidget::itemClicked, this,
         [this](QListWidgetItem *item){ qDebug() << item->text(); });
 // 删除当前选中的项
 lst->takeItem(lst->currentRow());
QTableWidget 表格

QTableWidget(表控件)以行列结构显示数据。流程:setColumnCount/setRowCount 定行列 → setHorizontalHeaderLabels 设表头 → setItem(row, col, new QTableWidgetItem("值")) 填单元格。

行列数:setColumnCount(n)、setRowCount(n);读取 rowCount()/columnCount()。

表头:setHorizontalHeaderLabels(QStringList),列表顺序对应各列。

写单元格:setItem(行, 列, new QTableWidgetItem("内容"));读单元格:table->item(行, 列)->text()(注意:没填过的单元格 item() 返回空指针,取 text 会崩)。

遍历填充常用双重 for 循环 + QString::arg() 拼内容。

复制代码
 table = new QTableWidget(this);
 table->setGeometry(10, 10, 500, 500);
 table->setColumnCount(3);             // 3列
 table->setRowCount(5);                // 5行
 QStringList lst;
 lst << "姓名" << "年龄" << "成绩";
 table->setHorizontalHeaderLabels(lst); // 表头
 ​
 int rows = table->rowCount();         // 读行数
 int cols = table->columnCount();      // 读列数
 ​
 // 写单元格:0行1列 = "haonan"
 table->setItem(0, 1, new QTableWidgetItem("haonan"));
 // 读单元格
 qDebug() << table->item(3, 0)->text();

常用信号:cellClicked(int row, int column)(点击某格,带行列号)、itemClicked(QTableWidgetItem*)(点击某项)。

整行选中:setSelectionBehavior(QAbstractItemView::SelectRows)。

列宽行高:setColumnWidth(列, 宽)、setRowHeight(行, 高);隐藏列 setColumnHidden(列, true)。

增删行/列:insertRow(rowCount()) 末尾加行、insertColumn(columnCount())、removeRow(currentRow()) 删当前行。

单元格里放控件:setCellWidget(行, 列, new QCheckBox("性别"))------控件会嵌进单元格(表格放复选框的常用手段)。

表头字体:QHeaderView *head = table->horizontalHeader(); head->setFont(ft);

复制代码
 // 点击单元格时触发,参数是行列号
 connect(table, &QTableWidget::cellClicked, this,
         [this](int row, int col) {
             qDebug() << "点击了" << row << "行" << col << "列";
         });
 ​
 table->setColumnWidth(0, 100);        // 第0列宽100
 table->setRowHeight(2, 50);           // 第2行高50
 table->insertRow(table->rowCount());  // 末尾加一行
 table->removeRow(table->currentRow());// 删除当前行
 ​
 // 把复选框嵌进 0行0列 的单元格
 table->setCellWidget(0, 0, new QCheckBox("性别"));
相关推荐
smallswan1 小时前
《Rust七十二变》开源了
开发语言·后端·rust·ai编程
我是小灰灰吖1 小时前
解决高频率图像处理中的内存“只增不减”:glibc malloc_trim实战指南
linux·qt
闻道且行之2 小时前
图片处理助手|C++ 手搓离线 AI 抠图工具,U2Net 原理到落地一次讲透
开发语言·c++·人工智能·神经网络·opencv·计算机视觉
三言老师2 小时前
K8s集群运行时异常趋势分析预警实操
java·开发语言·kubernetes
玖釉-2 小时前
nvpro_core2 源码与架构解析:NVIDIA Vulkan 图形开发基础框架
c++·windows·图形渲染
210Brian2 小时前
STM32学习笔记(七)TIM定时中断(上)
笔记·stm32·学习
秋田君2 小时前
QT_一个UDP通信程序(单播+广播)
开发语言·qt·udp
我是小灰灰吖2 小时前
Qt 6.9.3 Ubuntu 22.04 虚拟键盘显示问题全记录与解决方案
linux·qt·ubuntu
qq_22589174663 小时前
基于Flask的空气质量监测与预测分析系统
开发语言·后端·python·信息可视化·django·flask