【Qt】Item Widgets 多元素控件
Qt中提供的多元素控件有:
- QListWidget
- QListView
- QTableWidget
- QTableView
- QTreeWidget
- QTreeView
上述控件分为Widget和View,其区别如下:
以QTableWidget和QTableView为例
- QTableView是基于MVC(Model-View-Controller)设计的控件。QTableView自身不持有数据,只是实现界面效果。使用QTableView需要用户创建一个Model对象(比如QStandarModel),并且把Model和QTableView关联起来,后续修改Model中的恶数据就会影响QTableView的显示;修改QTableView也会影响Model中的数据(双向绑定)
- QTableWidget则是QTableView的子类,对Model进行了封装,不需要我们手动创建Model对象,直接往QTableWidget中添加数据即可
目录
QListWidget
QListWidgetItem
QTableWidget
QTableWidgetItem
QTreeWidget
QTreeWidgetItem
QListWidget
QListWidget类是用于显示条目列表的控件。每个条目可以包含文本和可选的图标

核心属性
| 属性 | 说明 |
| currentRow | 当前被选中的是第几行,下标从0开始 |
| count | 当前有多少行条目 |
| sortingEnabled | 是否允许排序 |
| isWrapping | 是否允许换行 |
| itemAlignment | 元素的对齐方式 |
| selectRectVisible | 被选中的元素矩形是否可见 |
| spacing | 元素之间的间隔 |
核心方法
| 方法 | 说明 |
| addItem(const QString &label) addItem(QListWidgetItem *item) | 在列表末尾添加元素 |
| currentItem() | 获取当前选中的条目,返回值是QListWidgetItem* |
| setCurrentItem(QListWidgetItem *item) | 设置选中哪个元素 |
| setCurrentRow(int row) | 设置选中第几行的条目 |
| insertItem(const QString& label, int row) insertItem(QListWidgetItem *item, int row) | 指定行插入元素,插入的元素顶替原先的位置 例如row = 0,那么新插入的元素下标将会为0 |
| item(int row) | 获取第row行的条目,返回值为QListWidgetItem * |
| takeItem(int row) | 删除指定行的条目,返回值为QListWidgetItem *,被删除的条目 |
核心信号
| 信号 | 说明 |
| currentItemChanged(QListWidgetItem *current, QListWidgetItem *old) | 选中不同元素时会触发,参数是当前选中的元素和之前的元素 注意:在QListWidget最开始展示时就会触发该信号,但此时没有old,所以编写相应的槽函数需要对指针判空 |
| currentRowChanged(int) | 选中不同元素时触发,参数是当前选中的行数 |
| itemClicked(QListWidgetItem *item) | 点击某个元素时触发 |
| itemDoubleClicked(QListWidgetItem *item) | 双击某个元素时触发 |
| itemActivated(QListWidgetItem *item) | 某个元素被激活,点击和双击都会触发该信号 |
| itemEntered(QListWidgetItem *item) | 鼠标进入元素时触发 |
| itemChanged(QListWidgetItem *item) | 条目的内容被改变时触发 |
QListWidgetItem
XXItem是用于显示界面中单个条目的类,包含了条目的数据和显示设置,比如文本、图标等
这些Item本身并不是Model,更类似于View或是对Model数据的一种显示
核心方法
| 方法 | 说明 |
| setFont | 设置字体 |
| setIcon | 设置图标 |
| setHidden | 设置隐藏 |
| setSizeHint | 设置尺寸 |
| setSelected | 设置是否选中 |
| setText | 设置文本 |
| setTextAlignment | 设置文本对齐方式 |
代码示例:使用QListWidget展示语言,QLineEdit输入新增语言,一个新增按钮和删除按钮
1. 使用Qt Designer添加所需控件

2. 编写widget.cpp,在构造函数中添加初始元素
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//初始化添加几个元素ui->listWidget->addItem("C++");ui->listWidget->addItem("Java");ui->listWidget->addItem("Python");//设置提示词ui->lineEdit->setPlaceholderText("请输入要添加的元素");
}
3. 编写按钮的槽函数
//增加条目
void Widget::on_pushButton_add_clicked()
{//获取输入框的文本const QString &text = ui->lineEdit->text();if(text == nullptr) return;//获取当前选中的下标int row = ui->listWidget->currentRow();//将新条目插入到选中条目之后,若没选中,index = 0,为头插ui->listWidget->insertItem(row, text);
}
//删除条目
void Widget::on_pushButton_delete_clicked()
{//另一种获取选中元素的方法auto *item = ui->listWidget->currentItem();if(item == nullptr) return;int row = ui->listWidget->row(item);ui->listWidget->takeItem(row);
}
QTableWidget
QTableWidget类用于显示二维表格数据

核心方法
| 方法 | 说明 |
| item(int row, int column) | 通过指定行列获取元素,返回值为QTableWidgetItem * |
| setItem(int row, int column, QTableWidget *item) | 通过指定行列,设置表格中的元素 |
| currentItem() | 返回被选中的元素,返回值为QTableWidgetItem * |
| currentRow() | 返回被选中元素的行号,从0开始 |
| currentColumn() | 返回被选中元素的列号,从0开始 |
| row(QTableWidgetItem *item) | 获取指定 item 的行号 |
| column(QTableWidgetItem *item) | 获取指定 item 的列号 |
| rowCount() | 获取当前列表有几行 |
| columnCount() | 获取当前列表有几列 |
| insertRow(int row) | 在第 row 行插入新行 若 insertRow(0),则新插入的行为第0行 |
| insertColumn(int column) | 在第 column 列插入新列 |
| removeRow(int row) | 删除第 row 行 |
| removeColumn(int column) | 删除第 column 列 |
| setHorizontalHeaderItem(int column, QTableWidgetItem *item) | 设置指定列的表头,即列属性 |
| setVerticalHeader(int row, QTableWidgetItem *item) | 设置指定行的表头,即行属性 |
| setHorizontalHeaderLabels(QStringList &labels) | 通过QStringList快速设置列属性 |
| setVerticalHeaderLabels(QStringList &labels) | 通过QStringList快速设置行属性 |
核心信号
| 信号 | 说明 |
| cellClicked(int row, int column) | 点击单元格时触发,参数是行号和列号 |
| cellDoubleClicked(int row, int column) | 双击单元格时触发,参数是行号和列号 |
| cellEntered(int row, int column) | 鼠标进入单元格时触发,参数是行号和列号 |
| currentCellChanged(int row, int column, int previousRow, int previousColumn) | 选中的单元格切换时触发,前两个参数是现在选中单元格的行列号,后两个参数是先前选中的单元格的行列号 |
QTableWidgetItem
QTableWidgetItem是二维单元格中表示和管理单元格数据的类,允许开发者在表格中操作和显示文本、图标和其他数据
核心方法
方法大致与QListWidgetItem相同,多了行列相关的方法
| 方法 | 说明 |
| row() | 获取该元素的行号 |
| column() | 获取该元素的列号 |
| setText(const QString &) | 设置文本 |
| setTextAlignment(int) | 设置文本对齐方式 |
| setIcon(const QIcon &) | 设置图标 |
| setSelected(bool) | 设置被选中 |
| setSizeHints(cinst QSize &) | 设置尺寸 |
| setFont(const QFont &) | 设置字体 |
代码示例:简易学生成绩表
1. 使用Qt Designer添加所需控件

2. 编写widget.cpp,在构造函数中初始化相关元素
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置提示词ui->lineEdit->setPlaceholderText("请输入新增列名");//插入4行3列for(int i = 0; i < 4; ++i)//4行ui->tableWidget->insertRow(i);for(int i = 0; i < 3; ++i)//3列ui->tableWidget->insertColumn(i);//设置列名QStringList colName = {"学号", "姓名", "成绩"};ui->tableWidget->setHorizontalHeaderLabels(colName);//初始数据ui->tableWidget->setItem(0, 0, new QTableWidgetItem("1001"));ui->tableWidget->setItem(0, 1, new QTableWidgetItem("张三"));ui->tableWidget->setItem(0, 2, new QTableWidgetItem("83"));ui->tableWidget->setItem(1, 0, new QTableWidgetItem("1002"));ui->tableWidget->setItem(1, 1, new QTableWidgetItem("小明"));ui->tableWidget->setItem(1, 2, new QTableWidgetItem("95"));ui->tableWidget->setItem(2, 0, new QTableWidgetItem("1003"));ui->tableWidget->setItem(2, 1, new QTableWidgetItem("小华"));ui->tableWidget->setItem(2, 2, new QTableWidgetItem("79"));
}
3. 编写按钮的槽函数
//新增一行
void Widget::on_pushButton_clicked()
{//尾插int row = ui->tableWidget->rowCount();ui->tableWidget->insertRow(row);
}
//新增一列,同时设置列名
void Widget::on_pushButton_2_clicked()
{const QString &text = ui->lineEdit->text();if(text == nullptr) return;//尾插一列并设置列名int col = ui->tableWidget->columnCount();ui->tableWidget->insertColumn(col);ui->tableWidget->setHorizontalHeaderItem(col, new QTableWidgetItem(text));
}
//删除一行
void Widget::on_pushButton_3_clicked()
{int row = ui->tableWidget->currentRow();ui->tableWidget->removeRow(row);
}
//删除一列
void Widget::on_pushButton_4_clicked()
{int col = ui->tableWidget->currentColumn();ui->tableWidget->removeColumn(col);
}
程序效果如下:

默认情况下,单元格的内容可以直接编辑。如果不想让用户编辑,可以设置
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
QTreeWidget
QTreeWidget类用于显示树形结构,集成了数据模型和视图的功能

QTreeWidget不同于往常的多叉树,Qt隐藏了该多叉树的根节点,我们只能访问从根节点以下的节点。
根节点以下第一层是 topLevelItem ,通过QTreeWidget添加;再往下的节点t通过 QTreeWidgetItem 的child指针连接
核心方法
| 方法 | 说明 |
| clear() | 清空所有子节点 |
| addTopLevelItem(QTreeWidgetItem *item) | 新增顶层节点 |
| topLevelItem(int index) | 获取指定下标的顶层节点,返回值是 QTreeWidgetItem * |
| topLevelItemCount() | 获取顶层节点的个数 |
| indexOfTopLevelItem(QTreeWidgetItem *item) | 查询指定节点在顶层节点中的下标 |
| takeTopLevelItem(int index) | 通过下标删除顶层节点,返回值是 QTreeWidgetItem * 表示被删除的节点 |
| currentItem() | 获取当前选中的节点,返回值是 QTreeWidgetItem * |
| setCurrentItem(QTreeWidgetItem *item) | 设置选中的节点 |
| setExpanded(bool) | 展开/关闭节点 true为展开,false为关闭 |
| setHeaderLabel(const QString &text) | 设置QTreeWidget的header名称,如上述样例的"动物" |
核心信号
| 信号 | 说明 |
| currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *old) | 切换选中元素时触发 |
| itemClicked(QTreeWidgetItem *item, int col) | 点击元素时触发 |
| itemDoubleClicked(QTreeWidgetItem *item, int col) | 双击元素时触发 |
| itemEntered(QTreeWidgetItem *item, int col) | 鼠标进入时触发 |
| itemExpanded(QTreeWidgetItem *item) | 元素被展开时触发 |
| itemCollapsend(QTreeWidgetItem *item) | 元素被折叠时触发 |
QTreeWidgetItem
QTreeWidgetItem类用于表示树状结构中的每个节点,可显示文本和图标等元素
在QTreeWidget中顶层元素和子元素其实都是QTreeWidgetItem,只是调用的接口不同,顶层元素通过QTreeWidget添加、删除、管理,子元素由顶层元素管理。
核心属性
| 属性 | 说明 |
| text | 持有的文本 |
| textAlignment | 文本对齐方式 |
| icon | 持有的图标 |
| font | 文本字体 |
| hidden | 是否隐藏 |
| disabled | 是否禁用 |
| expand | 是否展开 |
| sizeHint | 尺寸大小 |
| selected | 是否选中 |
| parent | 父亲节点 |
核心方法
| 方法 | 说明 |
| addChild(QTreeWidgetItem *child) | 新增子节点 |
| childCount() | 子节点的个数 |
| child(int index) | 获取指定下标的子节点,返回值是QTreeWidgetItem * |
| takeChild(int index) | 通过下标删除对应子节点 |
| removeChild(QTreeWidgetItem *child) | 通过指针删除对应子节点 |
| parent() | 获取父节点,返回值是QTreeWidgetItem * |
代码示例:使用QTreeWidget 展示动物种类
1. 通过Qt Designer添加所需控件

2. 编写widget.cpp,通过构造函数初始化相关控件
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit->setPlaceholderText("请输入要添加的元素");//设置根节点名称ui->treeWidget->setHeaderLabel("动物");//添加顶层元素QTreeWidgetItem *item_cat = new QTreeWidgetItem(ui->treeWidget);item_cat->setText(0, "猫");ui->treeWidget->addTopLevelItem(item_cat);QTreeWidgetItem *item_dog = new QTreeWidgetItem(ui->treeWidget);item_dog->setText(0, "狗");ui->treeWidget->addTopLevelItem(item_dog);QTreeWidgetItem *item_bird = new QTreeWidgetItem(ui->treeWidget);item_bird->setText(0, "鸟");ui->treeWidget->addTopLevelItem(item_bird);
}
3. 编写按钮的槽函数
//添加顶层节点
void Widget::on_pushButton_clicked()
{const QString &text = ui->lineEdit->text();if(text.isEmpty()) return;//构造新节点并链入QTreeWidgetQTreeWidgetItem *newColumn = new QTreeWidgetItem(ui->treeWidget);newColumn->setText(0, text);ui->treeWidget->addTopLevelItem(newColumn);
}
//添加非顶层节点
void Widget::on_pushButton_2_clicked()
{const QString &text = ui->lineEdit->text();if(text.isEmpty()) return;//获取父亲节点QTreeWidgetItem *parent = ui->treeWidget->currentItem();if(parent == nullptr) return;//构造新节点并链入parentQTreeWidgetItem *newColumn = new QTreeWidgetItem(parent);newColumn->setText(0, text);parent->addChild(newColumn);//添加完后直接展开parent->setExpanded(true);
}
//删除子项
void Widget::on_pushButton_3_clicked()
{QTreeWidgetItem *curItem = ui->treeWidget->currentItem();QTreeWidgetItem *parent = curItem->parent();if(parent == nullptr){//顶层元素int index = ui->treeWidget->indexOfTopLevelItem(curItem);ui->treeWidget->takeTopLevelItem(index);}elseparent->removeChild(curItem);//非顶层元素
}
结束语
感谢你的阅读,如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要

相关文章:
【Qt】Item Widgets 多元素控件
Qt中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView 上述控件分为Widget和View,其区别如下: 以QTableWidget和QTableView为例 QTableView是基于MVC(Model-View-Controller)设计的控件。QTableView自身…...
sharded_inference_engine:MLXDynamicShardInferenceEngine;step
目录 sharded_inference_engine:MLXDynamicShardInferenceEngine 类属性 方法 __init__(self) async def infer_prompt(self, shard: Shard, prompt: str, inference_state: Optional[str] = None) -> (np.ndarray, str, bool) async def infer_tensor(self, shard: …...
JAVA开发学习-day21
JAVA开发学习-day21 1. 删除表单数据 根据ElementUI的官方组件指南,为表单每列的数据添加删除按钮 <el-table :data"tableData" style"width: 100%"><el-table-column prop"id" label"ID" width"180"…...
Python的安装环境以及应用
1.环境python2,Python 最新安装3.12可以使用源码安装 查看安装包 [rootpython001 ~]# yum list installed | grep epel 3[rootpython001 ~]# yum list installed | grep python [rootpython001 ~]# yum -y install python3 安装python3 查看版本 [root…...
TabLayout使用以及自定义tab标签
<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…...
第二十节、有限状态机和抽象类多态
一、抽象类 挂载到动画器上的就是继承抽象类代码 1、使用onenable周期函数启用 2、在每一个周期函数中对抽象类进行调用 3、隐藏公开的变量...
SQL注入实例(sqli-labs/less-23)
0、初始网页 1、闭合方式判断 闭合符号为单引号,通过测试发现过滤了注释,所以直接闭合 2、确定查询表的列数 确定查询表的列数为3列 ?id1 order by 3 3、确定回显位置 回显位置为第二列和第三列 ?id-1 union select 1,2,3 4、查看当前登录和数据…...
3.Redis数据类型(二)
LIST List 是一个简单的双向链表,支持从两端进行插入和删除操作。 常用命令: lpush/rpush/lrange lpush 插入一个或多个元素到列表的左端。 rpush 插入一个或多个元素到列表的右端。 lrange key start stop 获取元素(前闭后闭࿰…...
JavaWeb系列十一: Web 开发会话技术Session
Web 开发会话技术Session Session有什么用session基本原理session原理示意图session可以做什么如何理解Session Session常用方法Session底层实现机制原理分析图应用实例session实现原理动画 Session生命周期Session生命周期说明Session生命周期实例 作业布置 Session有什么用 …...
k8s中yaml文件的编写
目录 1.编写pod.yaml 2.编写deploment.yaml 3.编写service.yaml关联创建的pod 4.总结获取K8S资源配置清单文件模板方法 5.补充 1.编写pod.yaml vim demo1-pod.yaml apiVersion: v1 kind: Pod metadata:name: scj-podnamespace: xy101labels:app: nginxmylove: tangjunmyc…...
打卡第37天------动态规划
加油!不要放弃,那些冲进清北复交的高材生的水平真不是盖的,名不虚传,有实力的全能选手。我在刷题的过程中不得不表达一下对他们的钦佩。 这里在遍历顺序上可就有说法了。 如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for…...
openfeign本地试用
目的:在本地搭建一个简单的openfeign使用场景,测试查询、新增等功能 平台:win10 技术栈:Springboot, SpringCloud, Nacos, Mybatis, MySql, Logback 框架作用说明: Nacos用于服务注册,将provider应用注…...
数据库|SQLServer数据库:查询函数(SUM、COUNT、MAX、MIN、AVG)的使用
哈喽,你好啊,我是雷工! 日拱一卒,进一寸有进一寸的欢喜,本节学习数据库查询函数的使用。 以下为学习笔记。 01 求和 SUM:对某一字段列进行求和运算; 示例: 对账号表Account的文章…...
简单Qt贪吃蛇项目
目录 先看效果 项目介绍 界面一:游戏大厅界面 界面二:关卡选择界面编辑 界面三:游戏界面 游戏大厅页面 游戏关卡选择页面 游戏房间页面 封装贪吃蛇数据结构 初始化游戏房间界面 设置窗口大小、标题、图标等 蛇的移动 初始化贪…...
画菱形(曼哈顿距离)
输入一个奇数 nn,输出一个由 * 构成的 nn 阶实心菱形。 输入格式 一个奇数 nn。 输出格式 输出一个由 * 构成的 nn 阶实心菱形。 具体格式参照输出样例。 数据范围 1≤n≤991≤n≤99 输入样例: 5输出样例: * *** ******** * #i…...
CSP初赛知识点讲解(六)
CSP初赛知识点讲解(六) 运算表达式中缀变后缀表达式求值前缀表达式 例题训练(八) 运算表达式 运算表达式有三种,前缀表达式,中缀表达式,后缀表达式,我们常用的是中缀表达式…...
linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包
1.环境准备, ①装好Rocky linux9.2系统,设置好IP nmcli con mod ens160 ipv4.addresses 192.168.0.106/24 nmcli con mod ens160 ipv4.gateway 192.168.0.2 nmcli con mod ens160 ipv4.dns 114.114.114.114 nmcli con up ens160 nmcli con mod ens…...
QT实现上传服务器功能
代码如下所示: void UploadZipFileToServer(const QString& strPath) {m_pFile new QFile(strPath);// 创建HTTP多部份请求QHttpMultiPart *multiPart new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart;keyPart.setHeader(QNetworkReques…...
元岳食堂采购供应链系统-智慧食堂数据化解决方案
随着社会的发展和科技的进步,在数字化浪潮的推动下,智慧食堂供应链系统逐渐成为食堂管理的重要工具。在此背景下,元岳食堂采购供应链系统应运而生,该系统通过其独特的数字化和自动化功能,能够对食堂的采购、储存、配送…...
基于Java+SpringBoot+Vue的影城管理系统
基于JavaSpringBootVue的影城管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 哈喽…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
