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函数方法
191 0
|
5月前
|
编译器
Qt问题:Qt槽函数是否支持内联?
Qt问题:Qt槽函数是否支持内联?
47 0
|
5月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
1123 0
|
5月前
|
API
QT基础入门——Qt事件(五)
QT基础入门——Qt事件(五)
294 0
QT基础入门——Qt事件(五)
|
5月前
|
编译器 C++
qt槽函数的四种写法
QT槽函数的四种写法
86 0
qt槽函数的四种写法
|
12天前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
38 3
(13) Qt事件系统(two)
|
12天前
(7)Qt中的自定义槽(函数)
这篇文章介绍了在Qt中如何定义和使用自定义槽函数,包括类成员函数、静态类成员函数、全局函数和lambda表达式作为槽函数的示例,以及使用lambda表达式时的注意事项。
15 2
(7)Qt中的自定义槽(函数)
|
12天前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
38 0
(12)Qt事件系统(one)
|
2月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
164 4
|
4月前
Qt事件分发器、事件过滤器
Qt事件分发器、事件过滤器