夜雨聆风学习资料网

ARTICLE · 1070332

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

QT自定义控件之储能电站(源码开源)
一、前言
马上中秋节了,提前祝大家节日快乐,阖家欢乐!最近还是一如既往的忙,熟悉的老粉丝们都比较好,会经常性的点赞等给予支持。也有很多质疑者,还有些出于各种不知名目的旁敲侧击关注者,但是一般作者是有需求,都会尽力给予帮助。但是毕竟大家都穿着外套,分不清。所以后期可能也会有筛选制。相信大家借助AI,在技术上会如虎添翼,咱们每个人都是六边形战士。
好了,废话依然不多说了,来继续分享这期的主题。
二、作品展示

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

画面主体是储能电站一次主接线图: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")#endifvoidrotateAndPaintRect(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();}voidDrawText(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();}voidDrawImage(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);}
四、源码开源
本期源码开放,有需要的朋友可评论区回复“需要源码”,如果觉得这个对你有帮助
麻烦大家关注点赞收藏~博客更新的动力,感谢大家~如果有定制化需要,也可直接私信~视频后期会放在这里或某站,同名“Q态王”可搜索。大家如果有什么新的控件灵感,也可以评论区交流
五、往期精选文章推荐
1、QT自定义控件之电气接线图(源码开源)
2、QT自定义控件之葫芦兄弟(致敬童年动画片)
3、QT自定义控件之暖通系统(作品展示)
4、QT自定义控件之智慧农田操作系统(作品展示)
5、QT自定义控件之多发酵罐并联工艺(源码开源)
6、QT自定义控件之热换站系统(源码开源)
7、QT自定义控件之压缩机监控系统(源码开源)
8、QT自定义控件之化工配置流程示意(源码开源)
9、QT自定义控件之双向运行地铁(源码开源)
10、QT自定义控件之绘制清洗管道工艺流程图(源码开源)

相关学习资料