写点什么

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

作者:YOLO.
  • 2022 年 9 月 07 日
    河北
  • 本文字数:820 字

    阅读完需:约 3 分钟

前言:

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);//绿边蓝色填充椭圆}
复制代码

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

发布于: 刚刚阅读数: 4
用户头像

YOLO.

关注

还未添加个人签名 2022.05.06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 关于重绘事件处理函数 paintEvent()_qt_YOLO._InfoQ写作社区