要绘制动态2D图表或曲线,首先想到的使用第三方开源库QWT,QCustomPlot 等,但这并不影响我们自己去绘制。就像我们能熟练使用Qt模块进行开发了,也很有必要去了解一下Qt的底层实现原理,比如Qt元对象系统、事件循环、父子对象关系等等。
一.效果
二.原理
所谓双缓冲(double-buffers)绘图,就是在进行绘制时,先将所有内容都绘制到一个绘图设备(如 QPixmap)上,然后再将整个图像绘制到部件上显示出来。使用双缓冲绘图可以避免显示时的闪烁现象。
从Qt 4.0开始,QWidget部件的所有绘制都自动使用了双缓冲,所以一般没有必要在paintEvent()函数中使用双缓冲代码来避免闪烁。Qt取消双缓冲的方法是setAttribute( Qt::WA_PaintOnScreen)。
但双缓冲机制在很多场合仍然有其用武之地,当所需绘制的内容较复杂并需要频繁刷新,或者每次只需要刷新整个控件的一小部分时,仍应尽量采用双缓冲机制,尽管在使用双缓冲