Qt | 关于重绘事件处理函数 paintEvent()

简介: 关于页面刷新和绘制的操作。

前言:

QWidget提供的paintEvent()函数是一个纯虚函数,继承它的子类想进行重绘时必须重新实现这个函数。

引发重绘事件的情况:

  1. 当窗口控件第一次显示时,系统会自动产生一个绘图事件。
  2. repaint()与update()函数被调用时。
  3. 当窗口控件被其他部件遮挡,然后又显示出来时,会对隐藏的区域产生一个重绘事件。
  4. 重新调整窗口大小时。

paintEvent()函数是已经被高度优化过的函数,本身已经自动开启并实现了双缓冲机制,因此在Qt中重绘操作不会引起屏幕上的任何闪烁现象。

repaint()函数:

  • repaint()是最快引起重绘操作的,紧急情况下需要立刻重绘的时候可以调用repaint()。
  • 但是repaint()不能放到paintEvent()函数里面调用,或造成死循环。

update()函数:

  • update()调用之后不会立即重绘,而是将重绘事件放入主循环中,由main()主函数的事件循环(Event Loop)统一调度。
  • update()在调用paintEvent()之前做了优化,如果update()被调用了很多次,最后这些update()会合并到一个大的重绘事件,并加入到消息队列,最后只有这个大的update()被执行一次

repaint()和update()相比,一般情况下调用update()就够了,当update()不能满足需求时,再尝试使用repaint()。

在paintEvent()中实现绘图操作:

绘图常用的工具有画笔类QPen、画刷类QBrush和字体类QFont等,它们都继承自QPainter类。

  • QPainter可以绘制各种基础图形。
  • QPen类用于绘制几何图形的边缘,由颜色、宽度、线条风格等参数组成。
  • QBrush类是用于填充几何图形的调色板,由颜色和填充风格组成。
  • QFont类用于文本绘制,由字体属性组成。

例:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawLine(10, 100, 30, 300);//画线
    painter.setPen(Qt::red);
    painter.drawRect(10, 10, 100, 100);//红色矩形框
    painter.setPen(QPen(Qt::green, 5));
    painter.setBrush(Qt::blue);
    painter.drawEllipse(100, 10, 200, 200);//绿边蓝色填充椭圆
}

其他具体用法还可以参考帮助手册查看。

目录
相关文章
|
5月前
QT中HASH函数方法
QT中HASH函数方法
181 0
|
5月前
|
编译器
Qt问题:Qt槽函数是否支持内联?
Qt问题:Qt槽函数是否支持内联?
45 0
|
5月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
1019 0
|
5月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
187 0
QT基础入门——Qt事件(五)
|
5月前
|
编译器 C++
qt槽函数的四种写法
QT槽函数的四种写法
78 0
qt槽函数的四种写法
|
2月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
149 4
|
4月前
Qt事件分发器、事件过滤器
Qt事件分发器、事件过滤器
|
3月前
|
开发者
Qt中的事件该如何学习?(附带案例)
事件是Qt中比较重要的一部分,在初期如果理解不当学习可能会比较困难,这里提一嘴当初教我的那位老师水平是真的高,让我很轻易的就理解了事件的概念。 在平时我们见到那些界面上的某些快捷键就有可能是事件做的,例如ESC关闭窗口,Enter提交或者登录这种类似的,这也是事件的强大之处。
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
|
5月前
|
编译器 API
【Qt】- 信号和槽函数
【Qt】- 信号和槽函数
下一篇
无影云桌面