C++怎么实现Qt5双缓冲机制

这篇文章主要讲解了“C++怎么实现Qt5双缓冲机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++怎么实现Qt5双缓冲机制”吧!所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上。在早期的Qt版本中,若直接在控件上进行绘制工作,则在控件重绘时会产生闪烁的现象,控件重绘频繁时,闪烁尤为明显。双缓冲机制可以有效地消除这种闪烁现象。自Qt 5版本之后,QWidget 控件已经能够自动处理闪烁的问题。因此,在控件上直接绘图时,不用再操心显示的闪烁问题,但双缓冲机制在很多场合仍然有其用武之地。当所需绘制的内容较复杂并需要频繁刷新,或者每次只需要刷新整个控件的一小部分时,仍应尽量采用双缓冲机制。实现一个简单的绘图工具,可以选择线形,线宽,颜色等基本要素效果图构造函数autoFillBackground此属性保存小部件背景是否自动填充如果启用,该属性将导致Qt在调用paint事件之前填充小部件的背景。使用的颜色是由小部件调色板中的QPalette::Window颜色角色定义的。此外,Windows总是填充QPalette::Window,除非设置了WA_OpaquePaintEvent或WA_NoSystemBackground属性。如果小部件的父组件有一个静态背景渐变,则不能关闭这个属性(即设置为false)。重定义鼠标按下事件 mousePressEvent(),在按下鼠标按键时,记录当前的鼠标位置值startPos。重定义鼠标移动事件mouseMoveEvent(),鼠标移动事件在默认情况下,在鼠标按键被按下的同时拖曳鼠标时被触发。
QWidget的mouseTracking属性指示窗体是否追踪鼠标,默认为 false(不追踪),即在至少有一个鼠标按键被按下的前提下移动鼠标才触发mouseMoveEvent()事件,可以通过setMouseTracking(bool enable)方法对该属性值进行设置。如果设置为追踪,则无论鼠标按键是否被按下,只要鼠标移动,就会触发mouseMoveEvent()事件。在此事件处理函数中,完成向QPixmap对象中绘图的工作。具体代码如下:三个set就不说了,大家都明白,说下beginbool QPainter::begin(QPaintDevice **device*)开始绘制绘制设备,如果成功返回true;否则返回false,这里是在Pixmap中绘图接下来是设置笔,然后看看drawLine函数void QPainter::drawLine(const QPoint &p1, const QPoint &p2)这是一个重载函数。从p1到p2画一条线。然后设置当前的位置,e->pos()看这个函数这里是实现双缓冲区域的地方在上一个函数里,我们不是直接在面版上画画,而且在Pixmap里面画画,在这里,我们调用drawPixmap()函数,将用于接收图形绘制的QPixmap对象绘制在绘制区窗体控件上,这样就实现了双缓冲机制调整绘制区大小函数resizeEvent(),当窗体的大小发生改变时,效果看起来虽然像是绘制区大小改变了,但实际能够进行绘制的区域仍然没有改变。因为绘图的大小并没有改变,还是原来绘制区窗口的大小,所以在窗体尺寸变化时应及时调整用于绘制的QPixmap对象的大小。最后一句QWidget::resizeEvent(event);是为了完成其余的工作接下来实现clear函数,clear()函数完成绘制区的清除工作,只需调用一个新的、干净的QPixmap对象来代替pix,并调用update()函数重绘即可。看看被我们忽视的fill()函数void QPixmap::fill(const QColor &color= Qt::white)用给定的颜色填充像素图。当pixmap被绘制时,这个函数的效果是未定义的。上期已经说过的update()更新小部件,除非禁用更新或隐藏小部件。此函数不会导致立即重绘;相反,当Qt返回到主事件循环时,它会安排一个油漆事件进行处理。与调用repaint()相比,这允许Qt进行优化,以获得更快的速度和 香港云主机更少的闪烁。感谢各位的阅读,以上就是“C++怎么实现Qt5双缓冲机制”的内容了,经过本文的学习后,相信大家对C++怎么实现Qt5双缓冲机制这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是开发云,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: xp电脑维护维护的技巧有哪些

本篇内容主要讲解“xp电脑维护维护的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“xp电脑维护维护的技巧有哪些”吧!1、电脑出现蓝屏怎么办?①如果电脑不常出现蓝屏,直接重启电脑。②若为内存条故障很可能是内…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/14 16:23
下一篇 07/14 16:29

相关推荐

发表评论

您的电子邮箱地址不会被公开。