news 2026/9/27 12:01:50

QT自定义控件之储能电站(源码开源)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QT自定义控件之储能电站(源码开源)

一、作品展示

先进行咱们这期的作品亮相:

画面主体是储能电站一次主接线图:35kV 母线向下分出 6 组储能支路,每组包含变压器、PCS 变流器、电池簇。每个支路实时展示 Uab、I、P、Q 电气量,下方电池色块用填充高度代表 SOC,同时标注电压电流测点。右上角提供上电 / 断电按钮,点击后会改变开关状态、刷新线路颜色、更新测点数值。主要技术栈依然是:C++、QT、Qpainter

开发的核心亮点:

1、带电回路动态着色,直观区分运行状态

根据全站带电、支路开关分合状态自动切换线路、元件颜色:电池簇色块填充高度跟随 SOC 数值实时变化,一眼就能看清各组电池剩余容量,贴合电力监控的视觉习惯。

2、完整的测点信息可视化展示

每条支路绑定一组电力测点:线电压 Uab、电流 I、有功 P、无功 Q,电池簇下方同步展示 SOC、电压、电流数据。文本采用 QRect 对齐绘制,排版整齐稳定,不会出现文字错位。

3、深色工业监控 UI 风格

采用工控 SCADA 经典深色底色,降低长时间盯屏视觉疲劳,配色符合电力监控系统审美。

4、带电线路流动箭头动画,模拟电能流向,提升组态画面真实感

单纯用静态颜色区分带电回路,只能表达 “有电 / 无电” 状态;增加流动箭头动画之后,可以直观展示电能传输方向,更加贴合 SCADA 监控的现场观感。同时当实现通电状态时,流动线替代的动画感开始工作,,断开回路时,流动感也会同时消失,增加真实效果感。

5、轻量交互控制

主窗口提供上电、断电按钮,一键切换全站运行状态,联动刷新所有开关、线路、电池单元的显示效果,可模拟电站启停仿真。

二、实现流程

1、主窗口结构

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); for (int i = 12; i <= 34; i += 2) { ui->widget->Set_DisplayEvent_IsShow(i,1); } m_Timer = new QTimer(this); connect(m_Timer,SIGNAL(timeout()),this,SLOT(SlotTimer())); } MainWindow::~MainWindow() { delete ui; }

2、核心代码

本期的核心代码主要在CustomWidget.cpp中

部分代码展示:

#if defined(_MSC_VER) && (_MSC_VER >= 1600) # pragma execution_character_set("utf-8") #endif void rotateAndPaintRect(QPainter *painter, const QRectF &rect, int angle,bool isRound = false,int rx = 0,int ry = 0) { qreal cx = 0; qreal cy = 0; cx = rect.center().x(); cy = rect.center().y(); painter->save(); painter->translate(cx ,cy); painter->rotate(angle); QPointF drawOffset = rect.topLeft() - QPointF(cx,cy); painter->drawRect(drawOffset.x(), drawOffset.y(), rect.width(), rect.height()); painter->restore(); } void DrawText(QPainter &painter,const QRectF &rect,QString str,double angle,int size,QString fontFamily,int textAlignment) { QRectF rotatedRect(-rect.width()/2, -rect.height()/2, rect.width(), rect.height()); qreal cx = rect.x() + rect.width() / 2; qreal cy = rect.y() + rect.height() / 2; QFont font = QFont(fontFamily, size); painter.setFont(font); painter.save(); painter.translate(cx, cy); painter.scale(1, -1); painter.rotate(-angle);//旋转角度 painter.drawText(rotatedRect,textAlignment,str); //恢复上面保存的状态 painter.restore(); } void DrawImage(QPainter &painter, QImage &image, const QRectF &rect,double angle) { QRectF rotatedRect(-rect.width()/2, -rect.height()/2, rect.width(), rect.height()); painter.drawImage(rotatedRect, image); }

三、源码开放

本期源码开放,有需要的朋友可以去下面位置找我~

QT自定义控件之储能电站(源码开源)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 11:58:55

万象生鲜系统温度超限自动预警技术是领先关键点

万象生鲜系统通过温度超限自动预警技术&#xff0c;在存储与运输环节确保生鲜产品保持最佳状态。该技术能实时监测温度变化&#xff0c;及时发现异常并发出预警通知相关人员。这不仅提升了产品的安全与质量&#xff0c;也让智能冷链管理发挥着关键作用。凭借这一系统&#xff0…

作者头像 李华
网站建设 2026/9/27 11:51:00

CH32L103低功耗工业MCU实战:RISC-V外设协同与七层功耗优化

1. 为什么CH32L103正在成为工业级低功耗设计的新支点最近三个月&#xff0c;我在三个不同行业的工业项目里反复遇到同一个问题&#xff1a;客户拿着STM32L4系列的BOM清单来问&#xff0c;“有没有更便宜、更省电、还不用交ARM授权费的替代方案&#xff1f;”——不是在谈消费电…

作者头像 李华
网站建设 2026/9/27 11:50:23

V1项目封装实践复盘:从axios拦截器到PCB封装库

这两年做了不少项目封装相关的活儿&#xff0c;V1这个项目是最折腾、也最值得复盘的一个。所谓V1&#xff0c;其实不单指第一个版本&#xff0c;更意味着"第一次把散落的代码、组件、接口、甚至是封装库整理成一个可以稳定复用的体系"。项目里既有前端请求层、AI交互…

作者头像 李华
网站建设 2026/9/27 11:48:56

2026深度解读:Work Agent长程任务如何重塑团队自动化工作流

AI的交互范式&#xff0c;正在从单纯对话问答转向自主执行工作。早期大模型只能完成单轮问答&#xff0c;用户给出一句指令&#xff0c;模型返回一段文本&#xff0c;整个交互过程随对话窗口关闭而终止。随后多轮对话能力落地&#xff0c;AI能够记住上下文&#xff0c;在一段会…

作者头像 李华
网站建设 2026/9/27 11:47:06

用AI编程助手从零构建RS485与LoRa参数调试工具

最近这两个月我一直在折腾工业现场的东西&#xff0c;RS485总线和LoRa无线基本是逃不开的两座大山。RS485那边要逐个试波特率、翻Modbus协议、手算CRC16&#xff0c;LoRa那边更头大&#xff0c;频点、带宽、扩频因子、编码率全是十六进制寄存器值&#xff0c;算错一个模块就不通…

作者头像 李华