QT的部件
下面的内容由ai生成
模型视图架构
Qt 的模型视图架构(Model-View Architecture)是一种数据与界面分离的设计模式,核心目的是将数据的管理(模型)与数据的显示(视图)解耦,使同一组数据可以通过不同视图展示,且数据的修改不会影响视图的实现,反之亦然。这种架构极大提升了代码的灵活性、复用性和可维护性。
核心组成:模型(Model)、视图(View)、委托(Delegate)
Qt 的模型视图架构由三个核心组件构成,它们通过标准接口交互,彼此独立又协同工作:
组件 | 作用 | 核心类示例 |
---|---|---|
模型(Model) | 管理数据本身,提供统一接口供视图访问数据,负责数据的增删改查和通知更新。 | QAbstractItemModel (基类)、QStandardItemModel 、QStringListModel |
视图(View) | 负责数据的可视化展示,不存储数据,通过模型接口获取数据并渲染。 | QListView (列表)、QTableView (表格)、QTreeView (树形) |
委托(Delegate) | 处理视图中数据的编辑和显示样式,允许自定义单元格的渲染和编辑逻辑。 | QItemDelegate 、QStyledItemDelegate (默认) |
工作原理:组件间的交互方式
- 数据访问:视图通过模型提供的标准接口(如
data()
、rowCount()
等)获取数据,无需关心数据的具体存储方式(数组、数据库、文件等)。 - 数据更新通知:当模型中的数据发生变化(新增、删除、修改),模型会发射信号(如
dataChanged()
、rowsInserted()
)通知视图,视图接收信号后自动刷新显示。 - 用户交互处理:用户在视图上的操作(如点击、编辑)会被视图转发给委托或直接通过模型接口修改数据(如
setData()
),确保数据变更被模型记录。
核心类与继承关系
模型基类:
QAbstractItemModel
是所有模型的抽象基类,定义了通用接口(如数据获取、行 / 列计数、信号等)。派生类包括:QStringListModel
:简单列表数据(字符串列表)。QStandardItemModel
:通用的表格 / 树形数据模型,可自定义单元格数据。QSqlTableModel
:与数据库表关联的模型(Qt SQL 模块)。- 自定义模型:继承
QAbstractItemModel
实现特定数据逻辑(如网络数据、复杂结构数据)。
视图类:均继承自
QAbstractItemView
,针对不同数据结构优化:QListView
:展示列表数据(一维)。QTableView
:展示表格数据(二维,行 + 列)。QTreeView
:展示树形数据(层级结构,如文件系统)。
委托类:默认使用
QStyledItemDelegate
(支持样式表),可通过继承QAbstractItemDelegate
自定义渲染和编辑逻辑(如滑块、复选框作为单元格编辑器)。
项目视图
List view清单视图
继承自QAbstractItemView,用于以列表形式展示数据模型;支持单列或多列显示、图标视图、流视图等不同的显示模式;适用于需要呈现线性结构的数据列表的情况。
使用示例
Widget::Widget(QWidget *parent): QWidget(parent)
{resize(480, 600);//模型QStringListModel *listMode = new QStringListModel(QStringList()<< "运动类:篮球、足球" << "娱乐类:看电影、写小说、听音乐"<< "游戏类:五子棋、扑克牌、中国象棋"<<"旅游类:国外旅游、国内旅游");//视图setWindowTitle("list view 测试");QListView *listview = new QListView(this);listview->resize(400,300);listview->setModel(listMode);
}
显示结果
Tree view树视图
继承自 QAbstractItemView,用于以树状结构展示数据模型;支持展开和折叠节点、排序、多列显示等功能;适用于需要呈现层次化数据结构的情况
Widget::Widget(QWidget *parent): QWidget(parent)
{resize(480, 600);//1 初中部QList<QStandardItem *> items;QStandardItem *Item1 = new QStandardItem("1");QStandardItem *Item2 = new QStandardItem("初中部");items.push_back(Item1);items.push_back(Item2);//11 一年级QList<QStandardItem *> items1;QStandardItem *Item11 = new QStandardItem("11");QStandardItem *Item22 = new QStandardItem("一年级");items1 << Item11 << Item22;Item1->appendRow(items1);//111 一班 122 二班QList<QStandardItem *> items2;Item11->appendRow(items2<<new QStandardItem("111")<<new QStandardItem("一班"));QList<QStandardItem *> items3;Item11->appendRow(items3<<new QStandardItem("122")<<new QStandardItem("二班"));//模型QStandardItemModel *model = new QStandardItemModel();model->appendRow(items);model->setHorizontalHeaderLabels(QStringList()<<"编号"<<"初中部|高中部");//视图QTreeView *TreeView = new QTreeView(this);TreeView->setModel(model);TreeView->resize(300,400);
}
显示结果
Table View表视图
继承自 QAbstractItemView,用于以表格形式展示数据模型;支持表格视图的交互操作,如编辑、选择、排序、过滤等;适用于需要呈现二维表格数据的情况
使用示例
#include "widget.h"#include <QTableView>
#include <QHBoxLayout>
#include <QStandardItemModel>Widget::Widget(QWidget *parent): QWidget(parent)
{resize(600, 480);//3、创建模型对象QStandardItemModel *model = new QStandardItemModel;//5、设置表头
// model->setHorizontalHeaderLabels(QStringList() << "学号"
// << "姓名" << "性别" << "分数");model->setHorizontalHeaderItem(0, new QStandardItem("学号"));model->setHorizontalHeaderItem(1, new QStandardItem("姓名"));model->setHorizontalHeaderItem(2, new QStandardItem("性别"));model->setHorizontalHeaderItem(3, new QStandardItem("分数"));//4、添加数据setItemmodel->setItem(0, 0, new QStandardItem("191102"));model->setItem(0, 1, new QStandardItem("杨逍"));model->setItem(0, 2, new QStandardItem("男"));model->setItem(0, 3, new QStandardItem("680"));model->setItem(1, 0, new QStandardItem("191101"));model->setItem(1, 1, new QStandardItem("张三丰"));model->setItem(1, 2, new QStandardItem("男"));model->setItem(1, 3, new QStandardItem("700"));model->setItem(2, 0, new QStandardItem("191103"));model->setItem(2, 1, new QStandardItem("赵敏"));model->setItem(2, 2, new QStandardItem("女"));model->setItem(2, 3, new QStandardItem("748"));//1、创建视图对象QTableView *tabView = new QTableView;//2、关联视图对象与模型对象tabView->setModel(model);tabView->setEditTriggers(QAbstractItemView::NoEditTriggers);tabView->sortByColumn(0, Qt::AscendingOrder);//设置布局QHBoxLayout *hLayout = new QHBoxLayout;hLayout->addWidget(tabView);setLayout(hLayout);}Widget::~Widget()
{
}
显示结果
项目部件
用于显示和处理数据的常用部件。适用于表格数据、树形数据和列表数据的展示与交互
List Widget列表部件
在 Qt 中,QListWidget
是一种用于显示和管理列表项的便捷部件,属于 “项部件”(Item Widgets)家族,专为简单的列表场景设计。它内部集成了数据存储和显示功能(自带默认模型),无需手动关联外部模型,适合快速实现如 “文件列表”“选项列表” 等简单需求。
一、QListWidget 的核心特点
- 自带模型:无需像
QListView
那样手动绑定模型(QAbstractItemModel
),内部已封装好数据管理逻辑,开箱即用。 - 支持多种项类型:可显示文本、图标,甚至自定义部件(如按钮、复选框等)。
- 简化操作:提供直观的 API 用于添加、删除、修改列表项,适合初学者或简单场景。
二、基本使用方法(代码实现)
以下是通过代码创建 QListWidget
并添加列表项的示例:
#include <QApplication>
#include <QListWidget>
#include <QListWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 1. 创建ListWidget部件QListWidget listWidget;listWidget.setWindowTitle("QListWidget 示例");listWidget.resize(300, 200);// 2. 添加列表项(文本)listWidget.addItem("第一项");listWidget.addItem("第二项");listWidget.addItem("第三项");// 3. 添加带图标的项(需先准备图标资源)QListWidgetItem *iconItem = new QListWidgetItem(QIcon(":/icons/star.png"), "带图标的项");listWidget.addItem(iconItem);// 4. 设置列表属性(可选)listWidget.setSelectionMode(QAbstractItemView::MultiSelection); // 允许多选listWidget.setEditTriggers(QAbstractItemView::DoubleClicked); // 双击可编辑项// 5. 显示部件listWidget.show();return app.exec();
}
显示结果
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 中找到
List Widget
,拖到界面上。 - 添加项:
- 右键列表 → “编辑项目...” → 在弹出的对话框中点击 “+” 添加文本项。
- 若需添加图标,可在属性编辑器中选中项,设置
icon
属性(需先通过.qrc
资源文件导入图标)。
- 设置属性:在右侧属性编辑器中修改常用属性:
selectionMode
:选择模式(单选、多选等)。editTriggers
:编辑触发方式(双击、回车等)。viewMode
:显示模式(列表ListMode
或图标IconMode
)。
四、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
添加项 | addItem(const QString &text) (文本项)addItem(QListWidgetItem *item) (自定义项) |
插入项 | insertItem(int row, const QString &text) (在指定行插入) |
删除项 | takeItem(int row) (移除并返回项,需手动释放内存)clear() (清空所有项) |
获取选中项 | selectedItems() (返回选中项列表,QList<QListWidgetItem*> )currentItem() (返回当前焦点项) |
设置项属性 | QListWidgetItem::setIcon(const QIcon &icon) (图标)QListWidgetItem::setData(int role, const QVariant &value) (自定义数据) |
切换显示模式 | setViewMode(QListWidget::ListMode) (列表)或 IconMode (图标) |
五、信号与槽(响应交互)
QListWidget
提供了丰富的信号,用于响应用户操作,例如:
#include <QApplication>
#include <QListWidget>
#include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QListWidget listWidget;listWidget.addItem("苹果");listWidget.addItem("香蕉");listWidget.addItem("橙子");listWidget.setWindowTitle("信号与槽示例");listWidget.show();// 1. 点击项时触发QObject::connect(&listWidget, &QListWidget::itemClicked, [](QListWidgetItem *item) {QMessageBox::information(nullptr, "提示", "你点击了:" + item->text());});// 2. 项被修改时触发(需先开启编辑模式)listWidget.setEditTriggers(QAbstractItemView::AnyKeyPressed); // 按任意键可编辑QObject::connect(&listWidget, &QListWidget::itemChanged,[](QListWidgetItem *item) {QMessageBox::information(nullptr, "提示", "项已修改为:" + item->text());});return app.exec();
}
六、与 QListView 的区别
场景 | 推荐使用 QListWidget | 推荐使用 QListView |
---|---|---|
复杂度 | 简单列表(文本、图标,无需复杂数据逻辑) | 复杂数据(动态更新、多视图共享数据、数据库关联) |
灵活性 | 低(自带模型,定制化弱) | 高(可绑定自定义模型,支持复杂交互) |
易用性 | 高(API 简单,适合快速开发) | 中(需理解模型视图架构) |
总结
QListWidget
是 Qt 中快速实现列表功能的 “利器”,适合简单场景(如静态选项列表、文件列表展示)。如果需要更灵活的数据管理(如实时更新、多视图共享数据),则应考虑使用 QListView
配合模型(如 QStringListModel
)。
在 Qt 中,QTreeWidget
是用于展示树形层级结构数据的便捷部件(属于 Item Widgets 家族),特别适合呈现具有父子关系的数据(如文件系统、分类列表、组织架构等)。它自带内置模型,无需手动关联外部模型,使用简单直观,适合快速开发。
QTreeWidget
一、QTreeWidget 的核心特点
- 树形层级结构:由「项(
QTreeWidgetItem
)」组成,每个项可以包含子项,形成多级嵌套(如 “父项→子项→孙项”)。 - 自带数据管理:内部封装了数据存储逻辑,无需像
QTreeView
那样手动绑定QAbstractItemModel
,开箱即用。 - 支持丰富样式:每个项可设置文本、图标、复选框等,还能通过样式表自定义外观。
二、基本使用方法(代码实现)
以下示例展示如何创建 QTreeWidget
并构建一个简单的树形结构(如 “水果分类”):
#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 1. 创建TreeWidget部件QTreeWidget treeWidget;treeWidget.setWindowTitle("QTreeWidget 示例");treeWidget.resize(400, 300);// 可选:设置列数(默认1列,多列可用于展示更多信息,如“名称-数量”)treeWidget.setColumnCount(2);treeWidget.setHeaderLabels(QStringList() << "名称" << "数量"); // 设置列标题// 2. 创建顶层项(一级节点)QTreeWidgetItem *fruitItem = new QTreeWidgetItem(QStringList() << "水果");QTreeWidgetItem *vegItem = new QTreeWidgetItem(QStringList() << "蔬菜");// 添加顶层项到树部件treeWidget.addTopLevelItem(fruitItem);treeWidget.addTopLevelItem(vegItem);// 3. 为顶层项添加子项(二级节点)fruitItem->addChild(new QTreeWidgetItem(QStringList() << "苹果" << "5个"));fruitItem->addChild(new QTreeWidgetItem(QStringList() << "香蕉" << "3个"));vegItem->addChild(new QTreeWidgetItem(QStringList() << "西红柿" << "2个"));vegItem->addChild(new QTreeWidgetItem(QStringList() << "黄瓜" << "4个"));// 4. 展开所有节点(可选)treeWidget.expandAll();// 5. 显示部件treeWidget.show();return app.exec();
}
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 拖入
Tree Widget
到界面。 - 设置列数与标题:
- 在属性编辑器中修改
columnCount
设置列数(如 “2”)。 - 右键树形部件 → “编辑标题...” → 输入列标题(如 “名称”“数量”)。
- 在属性编辑器中修改
- 添加项:
- 右键树形部件 → “添加顶级项” 创建一级节点。
- 选中一个项,右键 → “添加子项” 创建其子节点。
- 双击项可直接编辑文本,或在属性编辑器中修改
text
属性(多列时需指定列索引,如text[0]
为第一列文本)。
四、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
添加顶层项 | addTopLevelItem(QTreeWidgetItem *item) |
插入顶层项 | insertTopLevelItem(int index, QTreeWidgetItem *item) |
为项添加子项 | QTreeWidgetItem::addChild(QTreeWidgetItem *child) |
删除项 | takeTopLevelItem(int index) (删除顶层项)QTreeWidgetItem::takeChild(int index) (删除子项)clear() (清空所有项) |
获取选中项 | selectedItems() (返回选中项列表,QList<QTreeWidgetItem*> )currentItem() (返回当前焦点项) |
设置项属性 | QTreeWidgetItem::setIcon(int column, const QIcon &icon) (设置图标)QTreeWidgetItem::setText(int column, const QString &text) (设置文本)QTreeWidgetItem::setCheckState(int column, Qt::CheckState state) (设置复选框) |
展开 / 折叠节点 | expandItem(QTreeWidgetItem *item) (展开)collapseItem(QTreeWidgetItem *item) (折叠)expandAll() / collapseAll() (全部展开 / 折叠) |
五、信号与槽(响应交互)
QTreeWidget
提供多种信号响应用户操作,例如点击、双击、项状态变化等:
#include <QApplication>
#include <QTreeWidget>
#include <QMessageBox>
#include <QTreeWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTreeWidget treeWidget;treeWidget.setColumnCount(1);treeWidget.setWindowTitle("信号与槽示例");// 添加带复选框的项QTreeWidgetItem *item1 = new QTreeWidgetItem(QStringList() << "选项1");item1->setCheckState(0, Qt::Unchecked); // 第一列添加复选框treeWidget.addTopLevelItem(item1);// 1. 点击项时触发(获取项的文本和层级)QObject::connect(&treeWidget, &QTreeWidget::itemClicked,[&treeWidget](QTreeWidgetItem *item, int column) {QString text = item->text(column);// 获取项的层级(顶层项为0,子项为1,以此类推)int level = 0;QTreeWidgetItem *parent = item->parent();while (parent) {level++;parent = parent->parent();}QMessageBox::information(nullptr, "提示", QString("点击了:%1(层级:%2)").arg(text).arg(level));});// 2. 复选框状态变化时触发QObject::connect(&treeWidget, &QTreeWidget::itemChanged,[](QTreeWidgetItem *item, int column) {if (item->checkState(column) == Qt::Checked) {QMessageBox::information(nullptr, "提示", item->text(column) + " 已勾选");} else {QMessageBox::information(nullptr, "提示", item->text(column) + " 已取消勾选");}});treeWidget.show();return app.exec();
}
六、与 QTreeView 的区别
场景 | 推荐使用 QTreeWidget | 推荐使用 QTreeView |
---|---|---|
数据复杂度 | 简单树形结构(静态或少量动态数据,如配置列表) | 复杂树形数据(动态更新、多视图共享、数据库关联) |
灵活性 | 低(自带模型,定制化有限) | 高(可绑定自定义模型,支持复杂业务逻辑) |
易用性 | 高(API 简单,适合快速开发) | 中(需理解模型视图架构) |
总结
QTreeWidget
是快速实现树形结构的理想选择,适合展示层级关系明确的简单数据(如文件列表、分类菜单)。其核心是通过 QTreeWidgetItem
构建父子关系,并利用丰富的 API 和信号实现交互。如果需要处理复杂动态数据(如实时更新的树形数据库),则应使用 QTreeView
配合自定义模型(如 QAbstractItemModel
子类)。
Table Widget
在 Qt 中,QTableWidget
是用于展示和管理二维表格数据的便捷部件(属于 Item Widgets 家族),适合快速实现类似 “Excel 表格”“数据列表” 的界面。它自带内置模型,无需手动关联外部模型,每个单元格由 QTableWidgetItem
对象管理,支持文本、图标、复选框等内容,使用简单直观。
一、QTableWidget 的核心特点
- 二维表格结构:由行(
row
)和列(column
)组成,每个单元格通过「行号 + 列号」定位(索引从 0 开始)。 - 自带数据管理:内部封装了表格数据的存储逻辑,无需像
QTableView
那样绑定QAbstractItemModel
,开箱即用。 - 丰富的单元格功能:支持设置文本、图标、对齐方式、复选框,甚至可嵌入其他部件(如按钮、下拉框)。
二、基本使用方法(代码实现)
以下示例展示如何创建 QTableWidget
并填充数据(如 “学生信息表”):
#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView> // 用于设置表头样式int main(int argc, char *argv[]) {QApplication app(argc, argv);// 1. 创建TableWidget部件QTableWidget tableWidget;tableWidget.setWindowTitle("学生信息表");tableWidget.resize(600, 300);// 2. 设置行列数int rowCount = 3; // 3行数据int colCount = 4; // 4列(学号、姓名、性别、年龄)tableWidget.setRowCount(rowCount);tableWidget.setColumnCount(colCount);// 3. 设置表头(列标题)QStringList headers;headers << "学号" << "姓名" << "性别" << "年龄";tableWidget.setHorizontalHeaderLabels(headers);// 4. 填充单元格数据// 第0行tableWidget.setItem(0, 0, new QTableWidgetItem("2023001"));tableWidget.setItem(0, 1, new QTableWidgetItem("张三"));tableWidget.setItem(0, 2, new QTableWidgetItem("男"));tableWidget.setItem(0, 3, new QTableWidgetItem("18"));// 第1行tableWidget.setItem(1, 0, new QTableWidgetItem("2023002"));tableWidget.setItem(1, 1, new QTableWidgetItem("李四"));tableWidget.setItem(1, 2, new QTableWidgetItem("女"));tableWidget.setItem(1, 3, new QTableWidgetItem("19"));// 第2行QTableWidgetItem *ageItem = new QTableWidgetItem("20");ageItem->setTextAlignment(Qt::AlignCenter); // 单元格文本居中tableWidget.setItem(2, 0, new QTableWidgetItem("2023003"));tableWidget.setItem(2, 1, new QTableWidgetItem("王五"));tableWidget.setItem(2, 2, new QTableWidgetItem("男"));tableWidget.setItem(2, 3, ageItem);// 5. 优化表格样式(可选)tableWidget.horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 列宽自适应tableWidget.verticalHeader()->setVisible(false); // 隐藏行号// 6. 显示表格tableWidget.show();return app.exec();
}
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 拖入
Table Widget
到界面。 - 设置行列数:在属性编辑器中修改
rowCount
(行数)和columnCount
(列数)。 - 设置表头:
- 右键表格 → “编辑水平表头” → 输入列标题(如 “学号”“姓名”)。
- 如需隐藏行号,在属性编辑器中设置
verticalHeaderVisible
为false
。
- 填充数据:
- 双击单元格直接输入文本。
- 选中单元格后,在属性编辑器中修改
text
等属性(需先选中单元格对应的QTableWidgetItem
)。
四、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
设置行列数 | setRowCount(int rows) 、setColumnCount(int cols) |
设置表头 | setHorizontalHeaderLabels(const QStringList &labels) (水平表头)setVerticalHeaderLabels(...) (垂直表头) |
添加 / 删除行 | insertRow(int row) (插入行)removeRow(int row) (删除行)setRowCount(0) (清空所有行) |
设置单元格内容 | setItem(int row, int col, QTableWidgetItem *item) |
获取单元格内容 | item(int row, int col)->text() (需先判断 item 不为 nullptr) |
合并单元格 | setSpan(int row, int col, int rowSpan, int colSpan) (从 (row,col) 开始,合并 rowSpan 行、colSpan 列) |
设置选择模式 | setSelectionMode(QAbstractItemView::SelectionMode) (如单选单元格、选中整行等) |
设置编辑权限 | setEditTriggers(QAbstractItemView::EditTriggers) (如禁止编辑、双击编辑等) |
五、高级用法:单元格嵌入控件
QTableWidget
支持在单元格中嵌入其他部件(如按钮、复选框、下拉框),通过 setCellWidget()
实现:
#include <QApplication>
#include <QTableWidget>
#include <QPushButton>
#include <QCheckBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTableWidget table(2, 2); // 2行2列table.setWindowTitle("嵌入控件示例");table.setHorizontalHeaderLabels(QStringList() << "操作" << "状态");// 第0行第0列:嵌入按钮QPushButton *btn = new QPushButton("点击");table.setCellWidget(0, 0, btn);// 第0行第1列:嵌入复选框QCheckBox *checkBox = new QCheckBox("已完成");checkBox->setChecked(true);checkBox->setAlignment(Qt::AlignCenter); // 居中显示table.setCellWidget(0, 1, checkBox);// 调整列宽table.horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);table.show();return app.exec();
}
六、信号与槽(响应交互)
QTableWidget
提供多种信号响应用户操作,例如单元格点击、内容修改、选择变化等:
#include <QApplication>
#include <QTableWidget>
#include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTableWidget table(2, 2);table.setHorizontalHeaderLabels(QStringList() << "A" << "B");table.setItem(0, 0, new QTableWidgetItem("数据1"));table.setItem(0, 1, new QTableWidgetItem("数据2"));table.show();// 1. 点击单元格时触发QObject::connect(&table, &QTableWidget::cellClicked,[](int row, int col) {QMessageBox::information(nullptr, "提示", QString("点击了第%1行,第%2列").arg(row+1).arg(col+1));});// 2. 单元格内容修改时触发(需允许编辑)table.setEditTriggers(QAbstractItemView::DoubleClicked); // 双击可编辑QObject::connect(&table, &QTableWidget::itemChanged,[](QTableWidgetItem *item) {QMessageBox::information(nullptr, "提示", QString("第%1行第%2列修改为:%3").arg(item->row()+1).arg(item->column()+1).arg(item->text()));});return app.exec();
}
七、与 QTableView 的区别
场景 | 推荐使用 QTableWidget | 推荐使用 QTableView |
---|---|---|
数据复杂度 | 简单表格(静态数据、少量交互,如配置表、信息展示) | 复杂表格(动态数据、多视图共享、数据库关联,如实时更新的报表) |
灵活性 | 低(自带模型,定制化有限) | 高(可绑定自定义模型,支持复杂业务逻辑) |
易用性 | 高(API 简单,适合快速开发) | 中(需理解模型视图架构) |
总结
QTableWidget
是快速实现表格功能的理想选择,适合展示静态或简单动态的二维数据(如学生信息表、商品列表)。其核心是通过 QTableWidgetItem
管理单元格,并支持嵌入控件增强交互。如果需要处理复杂动态数据(如数据库表、实时更新的统计数据),则应使用 QTableView
配合自定义模型(如 QStandardItemModel
或 QAbstractTableModel
子类)。
输入部件
QComboBox
在 Qt 中,QComboBox
(组合框,又称下拉框)是一种融合了按钮与下拉列表的复合部件,用于在有限空间内提供多个选项供用户选择。它既可以展示当前选中项,又能通过下拉展开所有选项,适合选项数量不多且需要节省界面空间的场景(如 “性别选择”“日期筛选” 等)。
一、QComboBox 的核心特点
- 双重形态:默认显示当前选中项(类似按钮),点击后展开下拉列表(展示所有选项)。
- 支持编辑:可设置为 “可编辑模式”,允许用户直接输入文本(不仅限于选择预设选项)。
- 轻量灵活:相比
QListWidget
更节省空间,适合选项数量较少的场景(通常不超过 10 个)。
二、基本使用方法(代码实现)
以下示例展示如何创建 QComboBox
并添加选项,以及获取用户选择的结果:
#include <QApplication>
#include <QComboBox>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;window.setWindowTitle("QComboBox 示例");QVBoxLayout *layout = new QVBoxLayout(&window);// 1. 创建组合框QComboBox *comboBox = new QComboBox();// 2. 添加选项comboBox->addItem("选项1");comboBox->addItem("选项2");comboBox->addItem("选项3");// 添加带图标的选项(需先准备图标资源)comboBox->addItem(QIcon(":/icons/star.png"), "带图标的选项");// 3. 设置默认选中项(索引从0开始)comboBox->setCurrentIndex(1); // 默认选中"选项2"// 4. 添加标签用于显示选择结果QLabel *label = new QLabel("当前选择:" + comboBox->currentText());// 5. 关联信号与槽(选择变化时更新标签)QObject::connect(comboBox, &QComboBox::currentTextChanged,[label](const QString &text) {label->setText("当前选择:" + text);});// 布局管理layout->addWidget(comboBox);layout->addWidget(label);window.resize(300, 150);window.show();return app.exec();
}
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 拖入
Combo Box
到界面。 - 添加选项:
- 右键组合框 → “编辑项目...” → 在弹出的对话框中点击 “+” 添加选项文本。
- 若需添加图标,选中某选项后,在属性编辑器中设置
icon
属性(需通过.qrc
资源文件导入图标)。
- 设置属性:
currentIndex
:设置默认选中项的索引(0 为第一个选项)。editable
:设置为true
可开启编辑模式(允许用户输入文本)。maxCount
:限制最大选项数量。
四、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
添加选项 | addItem(const QString &text) (文本选项)addItem(const QIcon &icon, const QString &text) (带图标选项)addItems(const QStringList &items) (批量添加) |
插入选项 | insertItem(int index, const QString &text) (在指定索引插入选项) |
删除选项 | removeItem(int index) (删除指定索引的选项)clear() (清空所有选项) |
获取 / 设置选中项 | currentText() (获取当前选中的文本)currentIndex() (获取当前选中项的索引)setCurrentIndex(int index) (设置选中项)setCurrentText(const QString &text) (通过文本设置选中项) |
开启编辑模式 | setEditable(bool editable) (设为 true 后,用户可直接输入文本) |
获取编辑文本 | lineEdit()->text() (编辑模式下,获取用户输入的文本,需先判断 isEditable() 为 true ) |
五、信号与槽(响应交互)
QComboBox
提供多个信号响应用户操作,常用的有:
信号 | 触发时机 |
---|---|
currentIndexChanged(int index) | 选中项的索引发生变化时(初始设置默认项时也会触发) |
currentIndexChanged(const QString &text) | 选中项的文本发生变化时(重载版本,直接传递文本) |
activated(int index) | 用户选择某选项时(点击下拉列表中的选项,初始设置默认项时不触发) |
editTextChanged(const QString &text) | 编辑模式下,用户输入的文本发生变化时 |
示例(区分 currentIndexChanged
和 activated
):
#include <QApplication>
#include <QComboBox>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);QComboBox comboBox;comboBox.addItems({"A", "B", "C"});comboBox.setWindowTitle("信号差异示例");comboBox.show();// 1. currentIndexChanged:索引变化时触发(包括初始设置)QObject::connect(&comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),[](int index) {qDebug() << "currentIndexChanged:索引" << index;});// 2. activated:用户主动选择时触发(初始设置不触发)QObject::connect(&comboBox, QOverload<int>::of(&QComboBox::activated),[](int index) {qDebug() << "activated:用户选择了索引" << index;});// 初始设置默认项(会触发 currentIndexChanged,但不触发 activated)comboBox.setCurrentIndex(1);return app.exec();
}
运行后:
- 初始设置
setCurrentIndex(1)
会打印currentIndexChanged:索引 1
。 - 用户点击下拉列表选择其他选项时,两个信号都会触发。
六、高级用法:可编辑模式与自定义验证
当 setEditable(true)
开启编辑模式后,QComboBox
允许用户输入文本,结合验证器可限制输入格式(如数字、邮箱等):
#include <QApplication>
#include <QComboBox>
#include <QIntValidator> // 整数验证器int main(int argc, char *argv[]) {QApplication app(argc, argv);QComboBox comboBox;comboBox.setEditable(true); // 开启编辑模式comboBox.addItems({"10", "20", "30"}); // 预设选项// 添加整数验证器:限制输入为 0-100 的整数QIntValidator *validator = new QIntValidator(0, 100, &comboBox);comboBox.setValidator(validator);comboBox.setWindowTitle("可编辑组合框");comboBox.show();return app.exec();
}
七、与其他部件的对比
部件 | 特点与适用场景 |
---|---|
QComboBox | 节省空间,适合选项少(≤10 个)的场景,支持编辑 |
QListWidget | 展示所有选项,适合选项较多的场景,占用空间大 |
QSpinBox | 仅用于数字选择,支持上下箭头调整,不支持文本选项 |
总结
QComboBox
是 Qt 中用于选项选择的高效部件,兼具空间利用率和交互灵活性。核心优势是 “默认紧凑显示,展开后展示全部选项”,配合编辑模式和验证器可满足复杂输入需求。适合用于设置、筛选、类别选择等场景,是界面开发中的常用组件。
Font Combo Box字体组合框
在 Qt 中,QFontComboBox
是一种专门用于选择字体的组合框(继承自 QComboBox
),它会自动列出系统中安装的所有字体,无需手动添加选项,特别适合需要设置文本字体的场景(如文本编辑器、富文本处理工具等)。
一、QFontComboBox 的核心特点
- 自动加载系统字体:启动时会自动扫描并显示系统中所有可用的字体(如 “微软雅黑”“SimSun”“Arial” 等),无需手动添加字体列表。
- 字体过滤:可通过设置过滤条件,只显示特定类型的字体(如仅显示等宽字体、 proportional 字体等)。
- 与字体类联动:选中的字体可直接通过
QFont
类获取,方便应用到其他部件(如QLabel
、QTextEdit
等)。
二、基本使用方法(代码实现)
以下示例展示如何创建 QFontComboBox
,并将选中的字体应用到标签文本:
#include <QApplication>
#include <QFontComboBox>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;window.setWindowTitle("QFontComboBox 示例");QVBoxLayout *layout = new QVBoxLayout(&window);// 1. 创建字体组合框QFontComboBox *fontCombo = new QFontComboBox();// 2. 创建标签用于展示字体效果QLabel *label = new QLabel("这是一段示例文本");label->setFont(QFont("SimSun", 14)); // 初始字体// 3. 关联信号与槽:选中字体变化时,更新标签字体QObject::connect(fontCombo, &QFontComboBox::currentFontChanged,[label](const QFont &font) {// 将选中的字体应用到标签(保留原字号,只修改字体家族)QFont newFont = label->font();newFont.setFamily(font.family()); // 仅更新字体家族label->setFont(newFont);});// 布局管理layout->addWidget(fontCombo);layout->addWidget(label);window.resize(400, 200);window.show();return app.exec();
}
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 的 “输入部件” 分类中找到
Font Combo Box
,拖到界面上。 - 设置属性:
- 在属性编辑器中,
fontFilters
可设置字体过滤条件(如AllFonts
显示所有字体,MonospacedFonts
仅显示等宽字体)。 currentFont
可设置初始选中的字体(在下拉框中选择即可)。
- 在属性编辑器中,
四、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
获取当前选中字体 | currentFont() (返回 QFont 对象,包含字体家族、样式等信息) |
设置初始字体 | setCurrentFont(const QFont &font) (通过 QFont 对象设置初始选中项) |
字体过滤 | setFontFilters(QFontComboBox::FontFilters filters) (设置过滤条件,如只显示等宽字体)常用过滤值: AllFonts (所有字体)、ScalableFonts (可缩放字体)、MonospacedFonts (等宽字体)、ProportionalFonts (比例字体) |
获取字体家族名称 | currentFont().family() (返回字符串,如 “微软雅黑”“Arial”) |
五、信号与槽(响应字体选择变化)
QFontComboBox
最常用的信号是 currentFontChanged(const QFont &font)
,当用户选择的字体发生变化时触发,参数为选中的 QFont
对象,可直接用于更新其他部件的字体。
示例(打印选中的字体信息):
QObject::connect(fontCombo, &QFontComboBox::currentFontChanged,[](const QFont &font) {qDebug() << "选中的字体家族:" << font.family();qDebug() << "是否加粗:" << font.bold();qDebug() << "是否斜体:" << font.italic();});
六、与普通 QComboBox 的区别
特性 | QFontComboBox | 普通 QComboBox |
---|---|---|
选项内容 | 自动加载系统所有字体,无需手动添加 | 需要手动通过 addItem() 添加选项 |
核心用途 | 专门用于字体选择,与 QFont 无缝联动 | 通用选项选择,无特定数据类型关联 |
附加功能 | 支持字体过滤(按类型筛选) | 无内置过滤功能,需手动实现 |
总结
QFontComboBox
是 Qt 中用于字体选择的专用部件,核心优势是自动集成系统字体列表,无需手动维护字体选项,且能与 QFont
类直接联动,方便将选中字体应用到文本显示部件。适合在文本编辑器、文档处理软件等需要设置字体的场景中使用,大幅简化了字体选择功能的开发。
在 Qt 中,QLineEdit
(单行编辑框)是用于输入和显示单行文本的基础输入部件,广泛应用于需要用户输入简短信息的场景(如用户名、密码、搜索关键词、文件路径等)。它支持文本编辑、验证、格式限制等功能,是界面开发中最常用的输入控件之一。
QLineEdit
一、QLineEdit 的核心特点
- 单行限制:只能输入单行文本(按 Enter 键通常会触发 “编辑完成” 信号,而非换行)。
- 丰富的输入控制:支持设置只读、密码模式(输入内容显示为 * 或・)、提示文本(未输入时显示灰色提示)等。
- 输入验证:可通过验证器(
QValidator
)限制输入格式(如仅允许数字、邮箱、IP 地址等)。 - 便捷的交互:支持清除按钮、右键菜单(复制 / 粘贴)、撤销 / 重做等默认功能。
二、基本使用方法(代码实现)
以下示例展示 QLineEdit
的常见用法,包括普通输入、密码输入、提示文本和获取输入内容:
#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;window.setWindowTitle("QLineEdit 示例");QVBoxLayout *layout = new QVBoxLayout(&window);// 1. 普通单行编辑框(带提示文本)QLineEdit *normalEdit = new QLineEdit();normalEdit->setPlaceholderText("请输入用户名"); // 未输入时的提示文本layout->addWidget(normalEdit);// 2. 密码编辑框(输入内容隐藏)QLineEdit *passwordEdit = new QLineEdit();passwordEdit->setPlaceholderText("请输入密码");passwordEdit->setEchoMode(QLineEdit::Password); // 密码模式(显示为•)layout->addWidget(passwordEdit);// 3. 显示输入结果的标签QLabel *resultLabel = new QLabel("输入结果将显示在这里");layout->addWidget(resultLabel);// 4. 按钮:获取输入内容QPushButton *button = new QPushButton("获取输入");QObject::connect(button, &QPushButton::clicked,[normalEdit, passwordEdit, resultLabel]() {QString user = normalEdit->text(); // 获取用户名QString pwd = passwordEdit->text(); // 获取密码resultLabel->setText(QString("用户名:%1\n密码:%2").arg(user).arg(pwd));});layout->addWidget(button);window.resize(300, 200);window.show();return app.exec();
}
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 的 “输入部件” 分类中拖入
Line Edit
到界面。 - 设置属性:在右侧属性编辑器中修改常用属性:
placeholderText
:设置提示文本(如 “请输入手机号”)。echoMode
:设置输入显示模式(Normal
正常显示,Password
密码模式,NoEcho
完全不显示)。readOnly
:设为true
可禁止编辑(仅用于显示)。maxLength
:限制最大输入长度(如密码最多 20 个字符)。
四、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
设置 / 获取文本 | setText(const QString &text) (设置文本)text() (获取当前文本) |
清空文本 | clear() 或 setText("") |
设置提示文本 | setPlaceholderText(const QString &text) (未输入时显示的灰色提示) |
密码模式 | setEchoMode(QLineEdit::EchoMode mode) :- Normal :正常显示- Password :显示・或 *- PasswordEchoOnEdit :输入时显示,失去焦点后隐藏- NoEcho :完全不显示(如支付密码) |
只读模式 | setReadOnly(bool readOnly) (设为 true 后无法编辑,文本呈灰色) |
限制输入长度 | setMaxLength(int length) (如限制最多输入 11 位手机号) |
选中文本 | selectAll() (选中所有文本)setSelection(int start, int length) (选中指定范围文本) |
五、输入验证(限制输入格式)
QLineEdit
可通过验证器(QValidator
) 限制输入格式,常用验证器包括:
QIntValidator
:仅允许整数(可指定范围,如 0-100)。QDoubleValidator
:允许浮点数(可指定范围和小数位数)。QRegExpValidator
:通过正则表达式验证(如邮箱、手机号、IP 地址等)。
示例(限制输入为 11 位手机号):
#include <QApplication>
#include <QLineEdit>
#include <QRegExpValidator>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLineEdit *phoneEdit = new QLineEdit();phoneEdit->setPlaceholderText("请输入11位手机号");// 正则表达式:1开头,后跟10位数字(共11位)QRegExp regExp("^1[3-9]\\d{9}$");// 设置验证器phoneEdit->setValidator(new QRegExpValidator(regExp, phoneEdit));layout->addWidget(phoneEdit);window.setWindowTitle("手机号验证示例");window.resize(300, 100);window.show();return app.exec();
}
六、信号与槽(响应输入事件)
QLineEdit
提供多个信号响应用户输入,常用的有:
信号 | 触发时机 |
---|---|
textChanged(const QString &text) | 文本内容发生变化时(每输入一个字符都触发) |
editingFinished() | 编辑完成时(如按下 Enter 键、失去焦点) |
returnPressed() | 按下 Enter 键时 |
示例(实时显示输入长度):
#include <QApplication>
#include <QLineEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLineEdit *edit = new QLineEdit();edit->setPlaceholderText("请输入文本...");QLabel *lengthLabel = new QLabel("当前长度:0");// 文本变化时更新长度显示QObject::connect(edit, &QLineEdit::textChanged,[lengthLabel](const QString &text) {lengthLabel->setText(QString("当前长度:%1").arg(text.length()));});layout->addWidget(edit);layout->addWidget(lengthLabel);window.show();return app.exec();
}
七、高级用法:添加动作按钮
QLineEdit
支持在编辑框内添加动作按钮(如清除按钮、搜索按钮),通过 addAction()
实现,提升交互体验:
#include <QApplication>
#include <QLineEdit>
#include <QAction>
#include <QIcon>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLineEdit edit;edit.setPlaceholderText("输入后可点击清除...");// 添加清除按钮(位于编辑框右侧)QAction *clearAction = new QAction(QIcon(":/icons/clear.png"), "清除", &edit);edit.addAction(clearAction, QLineEdit::TrailingPosition); // TrailingPosition:右侧// 点击按钮时清空文本QObject::connect(clearAction, &QAction::triggered, &edit, &QLineEdit::clear);edit.show();return app.exec();
}
八、与其他输入部件的区别
部件 | 特点与适用场景 |
---|---|
QLineEdit | 单行文本输入,适合短文本(用户名、密码、关键词) |
QTextEdit | 多行文本输入,支持富文本(段落、字体样式等) |
QSpinBox | 仅用于数字输入,支持上下箭头调整,有范围限制 |
QComboBox | 从预设选项中选择,也可编辑(适合选项有限的场景) |
总结
QLineEdit
是 Qt 中处理单行文本输入的核心部件,兼具简洁性和灵活性。通过设置属性(如密码模式、提示文本)、验证器(限制输入格式)和动作按钮(增强交互),可满足各种输入场景需求。无论是简单的文本输入还是复杂的格式验证,QLineEdit
都是界面开发中不可或缺的基础控件。
QTextEdit
在 Qt 中,QTextEdit
(文本编辑框)是用于输入和显示多行文本的高级部件,支持富文本编辑(如设置字体、颜色、段落格式等),甚至可以嵌入图片、列表和表格,功能远超单行的 QLineEdit
。它广泛应用于需要处理长文本的场景(如文本编辑器、日志查看器、富文本邮件编辑等)。
一、QTextEdit 的核心特点
- 多行支持:允许输入和显示多行文本,自动换行或滚动显示。
- 富文本编辑:支持设置文本字体、大小、颜色、加粗 / 斜体等样式,以及段落对齐、列表(有序 / 无序)等格式。
- HTML 兼容:可解析和生成 HTML 格式文本(如
<b>粗体</b>
、<font color="red">红色</font>
)。 - 扩展性:可嵌入图片、表格,甚至通过自定义
QTextDocument
实现复杂文档功能。 - 便捷操作:自带右键菜单(复制 / 粘贴 / 撤销 / 重做),支持拖放文本。
二、基本使用方法(代码实现)
以下示例展示 QTextEdit
的基础用法,包括设置文本、获取内容和基本交互:
三、在 Qt Designer 中使用
- 拖放部件:从左侧 “部件箱” 的 “输入部件” 分类中拖入
Text Edit
到界面。 - 设置属性:在右侧属性编辑器中修改常用属性:
plainText
:设置初始纯文本(忽略样式)。html
:设置初始富文本(HTML 格式,如<h1>标题</h1>
)。readOnly
:设为true
可禁止编辑(仅用于显示长文本,如日志)。lineWrapMode
:设置换行模式(WidgetWidth
按部件宽度自动换行,NoWrap
不换行,通过滚动条查看)。
四、富文本编辑功能
QTextEdit
的核心优势是支持富文本编辑,可通过 QTextCursor
或 HTML 格式设置文本样式:
方法 1:通过 QTextCursor
设置样式(推荐用于代码控制)
#include <QTextCursor>
#include <QFont>
#include <QColor>// 向文本编辑框添加带样式的文本
void addStyledText(QTextEdit *edit) {QTextCursor cursor = edit->textCursor();// 设置字体(加粗、20号、红色)QFont font = cursor.charFormat().font();font.setBold(true);font.setPointSize(20);cursor.charFormat().setFont(font);cursor.charFormat().setTextColor(QColor("red"));cursor.insertText("这是加粗的红色文本\n");// 插入有序列表cursor.insertList(QTextListFormat::ListDecimal); // 1. 2. 3. 格式cursor.insertText("列表项1");cursor.insertBlock(); // 新列表项cursor.insertText("列表项2");
}
方法 2:通过 HTML 格式设置样式(简单直观)
// 直接设置HTML格式文本
textEdit->setHtml("<h1 style='color: blue;'>标题</h1>""<p>这是一段包含<b>粗体</b>和<i>斜体</i>的文本。</p>""<ul>"" <li>无序列表项1</li>"" <li>无序列表项2</li>""</ul>"
);
五、常用操作与 API
功能 | 核心方法 / 属性 |
---|---|
设置 / 获取纯文本 | setPlainText(const QString &text) (忽略样式)toPlainText() (返回纯文本) |
设置 / 获取富文本 | setHtml(const QString &html) (HTML 格式)toHtml() (返回 HTML 格式文本) |
清空文本 | clear() |
插入内容 | insertPlainText(const QString &text) (插入纯文本)insertHtml(const QString &html) (插入 HTML)QTextCursor::insertImage() (插入图片) |
设置只读 | setReadOnly(bool readOnly) (true 时禁止编辑) |
换行模式 | setLineWrapMode(LineWrapMode mode) :- WidgetWidth :按部件宽度自动换行- NoWrap :不换行,通过滚动条查看 |
查找文本 | find(const QString &text) (查找并选中指定文本,返回是否找到) |
六、信号与槽(响应文本变化)
QTextEdit
提供多个信号响应用户操作,常用的有:
信号 | 触发时机 |
---|---|
textChanged() | 文本内容发生任何变化时(输入、删除、格式修改等) |
cursorPositionChanged() | 光标位置移动时 |
selectionChanged() | 选中文本范围变化时 |
示例(实时显示文本字数):
#include <QApplication>
#include <QTextEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QTextEdit *textEdit = new QTextEdit();textEdit->setPlaceholderText("请输入文本...");QLabel *countLabel = new QLabel("字数:0");// 文本变化时更新字数统计(纯文本字数,不含HTML标签)QObject::connect(textEdit, &QTextEdit::textChanged,[textEdit, countLabel]() {int count = textEdit->toPlainText().length();countLabel->setText(QString("字数:%1").arg(count));});layout->addWidget(textEdit);layout->addWidget(countLabel);window.resize(400, 300);window.show();return app.exec();
}
七、高级用法:插入图片和表格
QTextEdit
支持嵌入图片和表格,通过 QTextCursor
实现:
插入图片
// 插入本地图片(需指定图片路径)
QTextCursor cursor = textEdit->textCursor();
QTextImageFormat imageFormat;
imageFormat.setName(":/images/example.png"); // 图片路径(通常通过.qrc资源文件引用)
imageFormat.setWidth(200); // 设置图片宽度
cursor.insertImage(imageFormat);
插入表格
// 插入2行3列的表格
QTextCursor cursor = textEdit->textCursor();
QTextTableFormat tableFormat;
tableFormat.setCellPadding(5); // 单元格内边距
tableFormat.setBorder(1); // 边框宽度
QTextTable *table = cursor.insertTable(2, 3, tableFormat);// 填充表格内容
table->cellAt(0, 0).firstCursorPosition().insertText("表头1");
table->cellAt(0, 1).firstCursorPosition().insertText("表头2");
table->cellAt(1, 0).firstCursorPosition().insertText("数据1");
八、与 QLineEdit 的区别
特性 | QTextEdit | QLineEdit |
---|---|---|
文本行数 | 多行(支持自动换行或滚动) | 单行(无法换行) |
文本样式 | 支持富文本(字体、颜色、段落格式等) | 仅支持简单样式(如字体、颜色) |
功能扩展 | 可嵌入图片、表格、列表,支持 HTML | 无扩展功能,仅用于简单文本输入 |
适用场景 | 长文本编辑(文档、日志、富文本邮件) | 短文本输入(用户名、密码、关键词) |
总结
QTextEdit
是 Qt 中处理多行和富文本的核心部件,兼具灵活性和强大功能。无论是简单的多行文本输入,还是复杂的富文本编辑(如设置样式、插入图片 / 表格),QTextEdit
都能满足需求。通过结合 QTextCursor
和 QTextDocument
,还可以实现更高级的文档处理功能(如自定义格式、语法高亮等),是开发文本编辑器、日志工具等应用的理想选择。
QPlainTextEdit
...