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("性别"));