当前位置: 首页 > news >正文

【Qt笔记】QTableWidget控件详解

 

目录

引言 

一、QTableWidget的特点

二、QTableWidget基础

2.1 引入QTableWidget

2.2 基本属性

三、代码示例:初始化QTableWidget

四、编辑功能

4.1 设置单元格为只读 

4.2 响应内容更改

五、选择模式

六、样式定制

七、与其他控件的交互

7.1 在单元格中嵌入控件 

八、高级功能

8.1 数据表示与编辑

8.2 表格操作

8.3 表头管理

8.4 排序与搜索

8.5 拖放功能

九、应用示例

9.1 代码

9.1.1 头文件 

9.1.2 main函数文件

9.2 实现效果

9.3 注意 

结语 


引言 

QTableWidget是Qt框架中的一个重要控件,用于展示和编辑二维表格数据。它基于QTableView和QStandardItemModel的封装,但提供了更为简便的接口,使得处理常见的表格操作需求变得更加容易。以下是对QTableWidget控件的详细解析,内容涵盖其特点、数据表示、初始化与数据填充、编辑功能、表头管理、选择模式、样式定制、信号与槽机制以及与其他控件的交互等方面。 

一、QTableWidget的特点

  • 二维数据表示:QTableWidget以行和列的形式组织数据,每个单元格由一个QTableWidgetItem对象表示,可以包含文本、图标或其他数据类型。
  • 简单易用:相比QTableView,QTableWidget提供了更多的直接操作方法,如插入、删除行或列,以及直接访问和修改单元格内容。
  • 编辑功能:用户可以直接在表格中编辑单元格内容,支持文本编辑、复选框、按钮等多种编辑模式。
  • 表头管理:可以自定义行列表头,行列表头默认是不可编辑的,用于标识各列或行的数据含义。
  • 选择模式:支持多种选择模式,如单选、多选、行选或列选等。
  • 样式定制:可以通过设置样式表来改变QTableWidget的外观,包括单元格颜色、字体、边框等。
  • 信号与槽机制:QTableWidget支持Qt的信号与槽机制,可以轻松地响应用户交互,如单元格点击、内容改变等事件。 

二、QTableWidget基础

2.1 引入QTableWidget

要使用QTableWidget,首先需要在Qt项目中包含相应的头文件,并在UI设计中或在代码中创建其实例。

#include <QTableWidget>  // 在Qt Designer中,可以直接通过拖放QTableWidget到窗体上  
// 或者在代码中动态创建  
QTableWidget *tableWidget = new QTableWidget(this); // 假设当前是在某个QWidget或QMainWindow的构造函数中

2.2 基本属性

  • 行数(RowCount) 和 列数(ColumnCount):可以通过setRowCount()和setColumnCount()设置。
  • 单元格(Cell):通过setItem(int row, int column, QTableWidgetItem *item)设置。
  • 表头(Header):分为水平表头(列表头)和垂直表头(行表头),可通过setHorizontalHeaderLabels()和setVerticalHeaderLabels()设置标签,或通过setHorizontalHeaderItem()和setVerticalHeaderItem()设置更复杂的表头项。

三、代码示例:初始化QTableWidget

以下是一个简单的示例,展示了如何创建一个包含几行几列的QTableWidget,并设置一些单元格的文本。

#include <QApplication>  
#include <QTableWidget>  
#include <QTableWidgetItem>  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  QTableWidget tableWidget(4, 3); // 创建一个4行3列的表格  tableWidget.setHorizontalHeaderLabels(QStringList() << "姓名" << "年龄" << "职业"); // 设置水平表头  // 设置一些单元格的文本  QTableWidgetItem *item = new QTableWidgetItem("张三");  tableWidget.setItem(0, 0, item);  tableWidget.setItem(0, 1, new QTableWidgetItem("30"));  tableWidget.setItem(0, 2, new QTableWidgetItem("软件工程师"));  // ... 为其他单元格设置文本(省略)  tableWidget.show();  return app.exec();  
}

四、编辑功能

QTableWidget的单元格默认是可编辑的(除非设置了只读属性)。用户可以直接在单元格中输入文本,或者通过编程方式更改单元格内容。

4.1 设置单元格为只读 

item->setFlags(item->flags() & ~Qt::ItemIsEditable);

4.2 响应内容更改

可以连接itemChanged(QTableWidgetItem *item)信号来响应单元格内容的更改。

connect(&tableWidget, &QTableWidget::itemChanged, [&](QTableWidgetItem *item) {  qDebug() << "单元格内容已更改:" << item->text();  
});

五、选择模式

QTableWidget支持多种选择模式,如单选、多选、行选或列选等。

tableWidget.setSelectionMode(QAbstractItemView::SingleSelection); // 单选  
// 或  
tableWidget.setSelectionMode(QAbstractItemView::MultiSelection); // 多选  
// 等

六、样式定制

通过样式表(StyleSheet),可以灵活地定制QTableWidget的外观,包括字体、颜色、边框等。

tableWidget.setStyleSheet("QTableWidget { selection-background-color: #3399ff; }"  "QTableWidget QTableCornerButton::section { background-color: #ccc; }");

七、与其他控件的交互

QTableWidget可以与其他Qt控件进行交互,例如通过按钮操作表格数据,或在表格单元格中嵌入其他控件(如QComboBox、QPushButton等)。

7.1 在单元格中嵌入控件 

QPushButton *button = new QPushButton("点击我");  
tableWidget.setCellWidget(row, column, button);  
connect(button, &QPushButton::clicked, [=]() {  // 处理按钮点击事件  
});

八、高级功能

QTableWidget 是 Qt 框架中的一个功能强大的表格控件,用于展示和编辑二维表格数据。它继承自 QTableView 并提供了更为简便的接口来处理常见的表格操作需求。以下是 QTableWidget 的一些高级功能详细介绍:

8.1 数据表示与编辑

  • 数据组织:QTableWidget 以行和列的形式组织数据,每个单元格由一个 QTableWidgetItem 对象表示,可以包含文本、图标或其他数据类型。
  • 编辑功能:用户可以直接在表格中编辑单元格内容,支持文本编辑、复选框、按钮等多种编辑模式。开发者可以通过设置 QTableWidgetItem 的 flags 属性来控制单元格的编辑性。

8.2 表格操作

  • 动态管理行列:支持在运行时动态地添加、删除行或列。使用 insertRow()、insertColumn() 方法添加行或列,使用 removeRow()、removeColumn() 方法删除行或列。
  • 初始化与填充数据:可以通过构造函数创建一个空的表格,并使用 setItem() 方法填充单元格数据。也可以通过 setRowCount() 和 setColumnCount() 方法设置表格的初始行数和列数。

8.3 表头管理

  • 自定义表头:可以自定义行和列的表头,用于标识各列或行的数据含义。表头默认是不可编辑的,但可以通过设置 QTableWidgetItem 的属性来改变其显示内容。
  • 表头样式:可以设置表头的对齐方式、字体、背景色等样式,以增强表格的可读性和美观性。

8.4 排序与搜索

  • 排序功能:支持对列数据进行排序,用户可以通过点击列头来按该列的数据进行升序或降序排序。
  • 搜索功能:虽然 QTableWidget 本身没有直接的搜索方法,但可以通过遍历表格中的单元格并使用 QTableWidgetItem 的 text() 方法来获取单元格内容,从而实现搜索功能。

8.5 拖放功能

  • 拖放支持:QTableWidget 支持单元格的拖放操作,通过设置 dragDropMode、安装事件过滤器及启用 dragEnabled 等属性,可以实现单元格之间的数据拖放。

九、应用示例

9.1 代码

这里为了显示简洁,将类的成员函数的实现也放在了头文件 

9.1.1 头文件 
#include <QApplication>
#include <QMainWindow>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QPushButton>
#include <QLineEdit>
#include <QHeaderView>
#include <QMessageBox>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {// 设置UIsetupUi();// 填充初始数据populateTable();}private slots:void addRow() {int rowCount = tableWidget->rowCount();tableWidget->insertRow(rowCount);for (int column = 0; column < tableWidget->columnCount(); ++column) {QTableWidgetItem *item = new QTableWidgetItem(QString("新数据%1-%2").arg(rowCount + 1).arg(column + 1));tableWidget->setItem(rowCount, column, item);}}void removeRow() {int currentRow = tableWidget->currentRow();if (currentRow != -1) {tableWidget->removeRow(currentRow);} else {QMessageBox::warning(this, "错误", "请先选择一行以删除。");}}void searchTable(const QString &searchText) {for (int row = 0; row < tableWidget->rowCount(); ++row) {bool showRow = false;for (int column = 0; column < tableWidget->columnCount(); ++column) {QTableWidgetItem *item = tableWidget->item(row, column);if (item && item->text().contains(searchText, Qt::CaseInsensitive)) {showRow = true;break;}}tableWidget->setRowHidden(row, !showRow);}}// 排序函数(简单示例,仅按第一列排序)void sortTable() {// 注意:这里只是简单调用QTableWidget的sortItems,并不使用代理模型tableWidget->sortItems(0, Qt::AscendingOrder);}private:void setupUi() {// 设置窗口标题this->setWindowTitle("QTableWidget控件例子");// 设置主窗口的中心部件QWidget *centralWidget = new QWidget(this);setCentralWidget(centralWidget);// 创建 QTableWidgettableWidget = new QTableWidget(this);tableWidget->setRowCount(0); // 初始不设置行,动态添加tableWidget->setColumnCount(3);tableWidget->setHorizontalHeaderLabels(QStringList() << "姓名" << "年龄" << "职业");// 创建添加和删除按钮QPushButton *addRowButton = new QPushButton("添加行", centralWidget);QPushButton *removeRowButton = new QPushButton("删除行", centralWidget);// 创建搜索框QLineEdit *searchLineEdit = new QLineEdit(centralWidget);searchLineEdit->setPlaceholderText("请输入要搜索的内容...");// 创建排序按钮(这里仅作为示例,实际排序可以通过点击表头实现)QPushButton *sortButton = new QPushButton("排序", centralWidget);// 布局管理QVBoxLayout *layout = new QVBoxLayout(centralWidget);layout->addWidget(searchLineEdit);layout->addWidget(tableWidget);layout->addWidget(addRowButton);layout->addWidget(removeRowButton);layout->addWidget(sortButton);// 连接信号和槽connect(addRowButton, &QPushButton::clicked, this, &MainWindow::addRow);connect(removeRowButton, &QPushButton::clicked, this, &MainWindow::removeRow);connect(searchLineEdit, &QLineEdit::textChanged, this, &MainWindow::searchTable);connect(sortButton, &QPushButton::clicked, this, &MainWindow::sortTable);// 启用拖拽tableWidget->setDragEnabled(true);tableWidget->setAcceptDrops(true);tableWidget->setDropIndicatorShown(true);// 设置窗口大小resize(600, 400);}void populateTable() {// 示例:添加几行初始数据for (int i = 0; i < 5; ++i) {addRow(); // 使用前面定义的addRow函数添加行for (int j = 0; j < 3; ++j) {QTableWidgetItem *item = new QTableWidgetItem(QString("数据%1-%2").arg(i+1).arg(j+1));tableWidget->setItem(i, j, item);}}}QTableWidget *tableWidget;
};
9.1.2 main函数文件
int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
}

9.2 实现效果

9.3 注意 

  • QTableWidget不支持通过代理模型(如QSortFilterProxyModel)进行搜索过滤,因此这里通过遍历表格项并隐藏不符合条件的行来实现搜索功能。
  • 拖放功能在QTableWidget中是基本支持的,但复杂的拖放逻辑(如跨表格或跨应用程序)需要自定义处理。
  • 当表格中的数据量很大时,频繁地隐藏和显示行可能会对性能产生影响。在这种情况下,考虑使用更高效的数据结构和视图控件(如QTableView与QAbstractTableModel)。
  • 排序:示例中提供了一个简单的排序函数,它仅根据第一列进行排序。QTableWidget自带的sortItems方法足以应对简单排序需求。
  • 在实际应用中,可能需要添加更多的错误检查和用户反馈机制,以提高应用的健壮性和用户体验。

结语 

QTableWidget是Qt中一个功能强大的控件,用于展示和操作二维表格数据。它提供了丰富的接口和功能,包括数据表示、编辑功能、表头管理、选择模式、样式定制等。通过合理使用QTableWidget,可以高效地实现各种表格相关的需求,为应用程序提供直观、友好的用户界面。然而,在处理大量数据时,可能需要考虑使用更高效的模型/视图架构。 

以上就是关于Qt中QTableWidget的全部介绍,如有不足与缺陷之处,欢迎评论区留言!!!   

 

相关文章:

【Qt笔记】QTableWidget控件详解

目录 引言 一、QTableWidget的特点 二、QTableWidget基础 2.1 引入QTableWidget 2.2 基本属性 三、代码示例&#xff1a;初始化QTableWidget 四、编辑功能 4.1 设置单元格为只读 4.2 响应内容更改 五、选择模式 六、样式定制 七、与其他控件的交互 7.1 在单元格…...

高低压配电系统中电弧光的危害有多大?

摘要 故障电弧是一种常见的电气故障现象&#xff0c;尤其在配电系统中&#xff0c;可能对设备安全和电力供应造成严重影响。本文旨在探讨故障电弧对配电系统的危害&#xff0c;并提出相应的预防措施&#xff0c;以增强系统的可靠性和安全性。通过对故障电弧的形成机制、危害分…...

安宝特案例 | AR如何大幅提升IC封装厂检测效率?

前言&#xff1a;如何提升IC封装厂检测效率&#xff1f; 在现代电子产品的制造过程中&#xff0c;IC封装作为核心环节&#xff0c;涉及到复杂处理流程和严格质量检测。这是一家专注于IC封装的厂商&#xff0c;负责将来自IC制造商的晶圆进行保护、散热和导通处理。整个制程繁琐…...

QGIS 如何连接空间库,并实时编辑空间表?编辑后库表如何刷新,保证是最新数据?

文章目录 一、什么是 qgis&#xff1f;二、qgis 如何连接数据库三、实时编辑空间表四、编辑后库表如何刷新&#xff0c;保证是最新数据&#xff1f;五、总结 一、什么是 qgis&#xff1f; QGIS&#xff08;原称Quantum GIS&#xff09;是一个用户界面友好的开源桌面端软件&…...

CleanClip for mac(苹果电脑剪切板管理器)

CleanClip 是一款为 Mac 设计的强大剪贴板管理工具&#xff0c;它能够显著提升你的工作效率和生产力。无论是在日常办公中还是进行创意设计&#xff0c;CleanClip 都能帮助你更轻松地管理和使用剪贴板内容。让我们一起来探索一下这个功能丰富的软件吧&#xff01; 下载地址&am…...

嵌入式栈溢出怎么办?

在写文件的时候,因为把FATFS这些数据结构定义在了函数里,所以栈溢出了,我把比较大的数据结构放在全局变量上,就没事了.目前仅测试阶段,也可以放在堆里.不用的时候释放掉,减少耦合度.或者加static....

工厂安灯系统在优化生产流程上的优势

工厂安灯系统通过可视化的方式&#xff0c;帮助工厂管理者和操作工人及时了解生产状态&#xff0c;快速响应问题&#xff0c;从而优化生产流程。 一、安灯系统实时监控与反馈 安灯系统的核心功能是实时监控生产线的状态。通过在生产现场设置灯光、显示屏等设备&#xff0c;工人…...

【Kubernetes】(K8S)彻底卸载详细教程

以下全部操作都是使用root用户进行&#xff08;非root用户可以使用sudo&#xff09;&#xff0c;并且全部命令都需要在Kubernetes集群的所有节点分别执行&#xff1a; 第一步、停止K8S 所有节点执行&#xff1a; 1 2 3 systemctl stop kubelet systemctl stop etcd systemct…...

web基础之文件上传

1.下载安装 下载地址 链接&#xff1a;百度网盘-链接不存在 提取码&#xff1a;jhks 安装 直接把他放在phpstudy的WWW目录中。&#xff08;phpstudy的下载安装&#xff0c;可以自行百度一下&#xff09; 打开 访问地址&#xff1a;127.0.0.1/upload-labs 问题 这里可能…...

解决“找不到msvcp140.dll无法继续执行代码”问题:技术困境与解决方案

在现代计算机技术的发展中&#xff0c;软件依赖性问题日益凸显&#xff0c;其中“找不到msvcp140.dll无法继续执行代码”错误尤为常见。本文将从技术背景、问题成因、解决方案及预防措施四个方面&#xff0c;深入探讨这一技术困境&#xff0c;旨在为读者提供全面的理解和有效的…...

智能赋能,Vatee万腾平台助力企业升级新高度

在当今这个日新月异的数字时代&#xff0c;智能技术的飞速发展正以前所未有的力量重塑着各行各业的面貌。作为这一变革浪潮中的佼佼者&#xff0c;Vatee万腾平台凭借其卓越的智能赋能能力&#xff0c;正引领众多企业迈向转型升级的新高度&#xff0c;开启了智能化发展的新篇章。…...

ceph-radosgw 手动安装教程以及安装问题解决办法

一、环境 操作系统版本&#xff1a;Ubuntu20.04 x86_64 ceph版本&#xff1a;ceph version 15.2.17 (8a82819d84cf884bd39c17e3236e0632ac146dc4) octopus (stable) radosgw版本&#xff1a;15.2.17 二、ceph-radosgw 安装步骤 ceph官方英文版教程&#xff0c;写了个大概步骤…...

PageRank算法

一.定义-迭代算法 输入:含有 n n n个结点的有向图,转移矩阵 M M M,阻尼因子 d d d,初始向量 R 0 R_0 R0​,计算精度 ϵ \epsilon ϵ 输出:有向图的PageRank向量 R R R (1)令 t 0 t0 t0 (2)计算 R t 1 d M R t 1 − d n 1 R_{t1} dMR_t \frac{ 1 - d }{ n} 1 Rt1​dMRt​…...

YOLOv8改进 | 模块缝合 | C2f 融合Self-Calibrated Convolutions丰富特征图【CVPR2020】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…...

跨境反向代购淘宝京东商品系统的商品价格详情等数据如何轻松自动化获取?

在跨境电商领域&#xff0c;反向代购系统逐渐成为连接国内外市场的重要桥梁。随着技术的不断发展和市场的日益成熟&#xff0c;如何高效、准确地自动化获取淘宝、京东等电商平台的商品价格、详情等数据&#xff0c;成为跨境反向代购系统开发者必须面对的重要课题。本文将详细介…...

初始爬虫5

响应码&#xff1a; 数据处理&#xff1a; re模块&#xff08;正则表达式&#xff09; re模块是Python中用于正则表达式操作的标准库。它提供了一些功能强大的方法来执行模式匹配和文本处理。以下是re模块的一些常见用法及其详细说明&#xff1a; 1. 基本用法 1.1 匹配模式 …...

深度盘点:2024年企业最喜欢用的WMS仓库管理系统有哪些?

本文将列举国内外知名的仓库管理系统&#xff0c;从每个系统的适用范围、核心功能、特点来为大家解读。为企业选型提供参考&#xff01; WMS系统是Warehouse Management System&#xff08;仓库管理系统&#xff09;的简称&#xff0c;它是一个帮助企业和仓库管理者高效管理仓库…...

qt如何通过特定字符将字符串拆分写入输入?

在Qt中&#xff0c;处理字符串并基于特定字符拆分字符串然后将其写入&#xff08;比如输入控件、文件等&#xff09;是一项常见的任务。Qt提供了丰富的字符串处理功能&#xff0c;其中最常用的类是QString。以下是一个简单的示例&#xff0c;展示如何使用Qt和QString类基于特定…...

结构体实现位段

目录 1.什么是位段 2.位段的计算 3. 位段的内存分配 4.位段的跨平台问题 5.位段的应⽤ 6.位段使⽤的注意事项 1.什么是位段 段位的声明和结构体是类似的&#xff0c;但有两个不同之处&#xff1a; 1. 位段的成员必须是 int &#xff0c;unsigned int&#xff0c;或 sign…...

刷题DAY35

判断回文数 题目&#xff1a;MM们都爱美&#xff0c;“回文”就是一种非常美的特殊的数或者文字短语&#xff0c;他们无论是顺读还是倒读&#xff0c;结果都一样。例如&#xff1a;12321&#xff0c; 55555&#xff0c;45554。如果GG们动不动来一段回文向MM们表达一下&#xf…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...