主题:关于Qt显示的刷新效率
20190731写
绘图主要有三种方法:QPainter、QCustomPlot、QWT,其中QPainter是Qt基础工具,直接使用QPainter绘制波形等图形效率是很低的。
关于QCustomPlot、QWT的比较参看网站:https://blog.csdn.net/lihuagedi/article/details/81137380。
关于QCustomPlot学习网站:
- QCustomplot(二) 源码解读: https://www.cnblogs.com/guaiweihudou/p/10761672.html。
- QCustomplot使用效率优化:https://www.cnblogs.com/pied/p/5164000.html
请了解QPixmap、QImage、QBitmap和QPicture的区别:
https://blog.csdn.net/cloud_castle/article/details/26256663
通过对QCustomPlot代码分析“加速Qt绘画的原理”的总结:
- QCustomPlot画曲线等控件是通过QPainter绘画到QPixmap内存中,最后调用report方法激活绘制到屏幕(QPainter::drawPixmap)。
由上思考两个问题:
-
对于多线程编程,数据分析处理和GUI实时显示波形数据,如何减轻UI线程负担或者做一些特殊效果?
答:QImage加载数组数据较好,实现的余辉、算法、叠加顺序、明暗程度都容易自控制。
如果是简单的曲线显示和没有余辉要求、点之间连线特殊需求,则QCustomPlot使用更加方便快捷。
比如示波器画波形需求很多(波形的余辉、上升或下降沿两点间两线方式、波形的明暗设置、波形的叠加顺序设置、波形的压缩算法),较适合使用QImage加载数组的方法。
示波器画趋势图、直方图、波特图需求较为简单,较适合使用QCustomPlot库。
网站:Qt加载RGB内存数据:https://blog.csdn.net/Aidam_Bo/article/details/84586132
RGB数组数据 -> QImage构造加载 -> QImage转为QPixmap -> QLabel控件设置显示QPixmap,其中RGB数组数据可以在非GUI线程中生成,提高GUI响应。 -
对于中等复杂度的图形绘制显示,如何减轻UI线程负担?
疑问:paintEvent绘画结束后再刷新屏幕显示了,还是其中QPainter画一条直线就立即刷新显示了?
答:是否可以学习画图库QCustomplot、Qwt的方法,先绘制到QPixmap内存之后,最后再在paintEvent中drawPixmap?!
请注意学习:
Qpainter、QPaintDevice、QPixmap、QImage几个类之间的关系
1、QPainter(QPaintDevice *device),QPainter::drawPixmap(XXX)。
2、QPaintDevice Inherited By: QImage, QOpenGLPaintDevice, QPaintDeviceWindow, QPicture, and QPixmap。