夜雨聆风学习资料网

ARTICLE · 1168223

QT自定义控件之乙烯裂解工艺监控系统(源码开源)

QT自定义控件之乙烯裂解工艺监控系统(源码开源)
一、前言
最近好长时间没有更新了,过了一个假期,所以忙东忙西也没时间来更新新的作品。现在AI这么强了,但是还在坚持创作。很荣幸也得到了一些同道中人的支持,在这里感谢大家!这期依然是在垂直领域里的创新,大家如果有什么需求灵感也可以评论区里讨论,博主也会努力坚持更新!
好了,继续晒出技术栈:C++\QT\QPainter。
二、作品展示
用 QPainter 打造轻量化工业 SCADA 画面引擎,支持工艺图渲染、实时数据绑定、动态流体动画、阀门状态切换、测点告警,适配工控机稳定运行。
画面完整还原乙烯裂解装置工艺流程:立式塔器、缓冲罐、离心泵、调节阀、管道管网,搭配实时数据面板、状态指示灯、流体流动动画,深蓝色工业科技风,符合化工中控室 HMI 视觉规范。管线用QPen绘制,支持不同粗细、颜色区分介质:绿色 / 黄色 / 红色管线代表不同物料介质。
下面来展示下这期的作品:
开发的核心亮点:

✨亮点 1:管道流体流动动画,轻量定时器驱动

工业组态最直观的效果就是管线内介质流动箭头。 方案:使用QTimer低频率刷新(工控场景不需要高刷,降低 CPU 占用),维护管线路径上一组采样点,每次刷新偏移箭头坐标。

  • 不同介质管线独立控制流速,可根据后端实时流量数据动态调整箭头移动速度;
  • 管线支持分段,流向可双向切换;利用QPainterPath保存管线贝塞尔曲线路径,沿着路径做点采样,定时器不断偏移采样点,绘制三角形箭头模拟介质流动。
  • 做了性能优化:只有处于可视区域的管线才执行动画绘制,闲置管线暂停刷新,避免大量管线同时动画造成 CPU 飙升

✨亮点 2:深色工业 UI 风格,适配中控室使用场景

中控室环境光线偏暗,所以整体采用深蓝暗色主题,降低屏幕眩光。

  • 配色体系:深色画布,高对比度管线;设备金属渐变,实现数据面板的发光边框;
  • 文字选用等宽工业字体,保证数字读数稳定对齐,防止数值跳动时界面抖动。
✨亮点 3:轻量交互控制
主窗口提供开始、停止按钮,一键切换全站运行状态,联动刷新所有开关、管道、警告的显示效果。下面来展示开始停止的功能:
三、实现流程

1、主窗口结构

MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    ui->setupUi(this);    m_Timer = new QTimer(this);    connect(m_Timer,SIGNAL(timeout()),this,SLOT(SlotTimer()));    m_CurrentFlag = false;}
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自定义控件之储能电站(源码开源)

相关学习资料