Qt重绘之update,repaint详解

2023-11-16

Qt里面的重绘和Windows编程里面的重绘差不多。但是Qt的重绘更有特色,更加智能。

在讲之前,先说说paintEvent()

paintEvent()是一个虚函数槽(slot),子类可以对父类的paintEvent进行重写。当调用update(),repaint()的时候,paintEvent()会被调用,另外,当界面有任何改变的时候,paintEvent()也会被调用,这种界面的改变包括界面从隐藏到显示,界面尺寸改变,当然还包括界面内容改变的时候会被调用。paintEvent()是已经被高度优化过的函数,它本身已经自动开启并实现了双缓冲(X11系统需要手动去开启双缓冲),因此Qt中重绘不会引起任何闪烁。

有了paintEvent的知识,现在再来看看update()和repaint()

update和repaint是一类的,需要重绘的对象主动去调用,然后重绘。update和repaint调用之后,都回去调用paintEvent().

repaint(),被调用之后,立即执行重绘,因此repaint是最快的,紧急情况下需要立刻重绘的可以使用repaint()。但是调用repaint的函数不能放到paintEvent中调用。举个例子:有一个继承于QWidget的子类MyWidget,并在子类中对paintEvent进行了重写。我们在MyWidget::myrepaint()中调用repaint()。但是,myrepaint()又被重写的paintEvent()调用。 这样调用repaint()的函数又被paintEvent()调用,由于repaint()是立即重绘,而且repaint()在调用paintEvent之前几乎不做任何优化操作,而是会造成死循环,即:先调用repaint(),继而调用paintEvent(),paintEvent()反过来有调用repaint()…如此死循环。

update()跟repaint()比较,update则更加有优越性。update()调用之后并不是立即重绘,而是将重绘事件放入主消息循环中,由main的event loop来统一调度的(其实也是比较快的)。update在调用paintEvent之前,还做了很多优化,如果update被调用了很多次,最后这些update会合并到一个大的重绘事件加入到消息队列,最后只有这个大的update被执行一次。同时也避免了repaint()中所提到的死循环。因此,一般情况下,我们调用update就够了,跟repaint()比起来,update是推荐使用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt重绘之update,repaint详解 的相关文章

随机推荐

  • Linux下的文件名空格处理

    转载原文 https blog csdn net michaelzhou224 article details 12708333 解决空格问题的几种方案 1 使用 来替代一个含有空格的文件以及目录 jorncess red black 可以
  • Android开发-Android项目结构

    文章目录 前言 一 Gradle 1 1什么是Gradle 1 2Gradle是一个构建工具 那么为什么要用构建工具 二 项目结构 三 app目录结构 四 res目录结构 总结 前言 Android工程的项目结构比较复杂 在进行Androi
  • AWD简单介绍和搭建AWD平台

    AWD简单介绍和搭建AWD平台 何为AWD 比赛中每个队伍维护多台服务器 服务器中存在多个漏洞 利用漏洞攻击其他队伍可以进行得分 修复漏洞可以避免被其他队伍攻击失分 1 一般分配Web服务器 服务器 多数为Linux 某处存在flag 一般
  • KNN数据分类算法的matlab仿真

    目录 1 算法概述 2 仿真效果 3 MATLAB仿真源码 1 算法概述 KNN的本质是通过距离判断待测样本和已知样本是否相似 待测样本找到与已知样本中与其距离最近的K个样本 对这k个样本 它们大多数属于哪一类别 就把待测样本归为哪一类别
  • [工程编写]cmakelist多版本python环境编写

    问题 最近在写一个工程的时候需要用到python3 但是由于引入了ROS相关的环境 导致希望使用python3的那部分代码一直默认使用ROS中的python2 这样环境就不对了 解决的方法 很顺理成章的想法是为需要python3的那部分代码
  • 注解&反射学习笔记

    1 注解的作用域及使用方式 表示我们的注解可以使用在那些地方 Target value ElementType METHOD ElementType TYPE 表示注解在什么地方有效 RESOUT 源码 lt CLASS 类 lt RUNT
  • IntelliJ Idea 常用快捷键 超实用!

    IntelliJ Idea 常用快捷键 列表 实战终极总结 1 自动代码 常用的有fori sout psvm Tab即可生成循环 System out main方法等boilerplate样板代码 例如要输入for User user u
  • Pytorch如何保存训练好的模型

    0 为什么要保存和加载模型 用数据对模型进行训练后得到了比较理想的模型 但在实际应用的时候不可能每次都先进行训练然后再使用 所以就得先将之前训练好的模型保存下来 然后在需要用到的时候加载一下直接使用 模型的本质是一堆用某种结构存储起来的参数
  • docker 迁移 /var/lib/docker(解决 /var/lib/docker 占用大 / 根目录空间占满问题)

    迁移docker工作目录 目的 为了解决 var lib docker 占用大 var 分区空间不够问题 说明 由于centos7 4系统 系统默认根目录下面为50G空间 docker默认数据目录在 var lib docker中 所以 会
  • 云孚快写:自动生成多级目录,一键生成万字长文

    1 产品简介 云孚快写是云孚科技自主研发的一款智能写作产品 基于大模型技术打造 针对长文写作场景深度优化 可根据文章标题一键生成目录 再根据目录一键生成正文 文章字数无上限 可极大提升用户的长文写作效率 云孚快写以哈工大与云孚科技联合研发的
  • Hive的常用HiveQL操作

    文章目录 Hive的常用HiveQL操作 1 HiveQL概述 2 HiveQL操作命令 2 1 数据定义 2 1 1 创建 修改和删除数据库 2 1 2 创建 修改和删除表 2 1 3 视图 索引创建 修改和删除 2 1 4 用户自定义函
  • 【如何处理信息收集时子域名爆破泛解析的问题】

    如何处理信息收集时子域名爆破泛解析的问题 子域名泛解析的成因 泛域名解析举例 子域名爆破中解决泛解析的方式 推荐工具 子域名泛解析的成因 在子域名解析中 每个子域名都会解析为一个特定的IP地址 只有被设置解析 用户才能正常进行访问 一旦用户
  • 一种解决ChatGPT报错“Sorry, you have been blocked“的方法

    ChatGPT突然不能用 尝试了网上说的重启V某N 打开隐私模式等方法都不管用 采用下面方式 解决 1 打开浏览器的 设置 2 找到语言设置 3 将首选语言改成英语 搞定
  • OpenStack主要功能和作用

    OpenStack主要组件和作用 openstack是一个开源的云计算管理平台 由几个重要的组件结合起来完成工作 openstack支持所有类型的云环境 实施简单可以大规模扩展丰富标准统一的云计算管理平台 openstack通过各种互补的服
  • C++之模板<template>

    目录 前言 模板 1 泛型编程 2 函数模板 2 1 函数模板的概念 2 2 函数模板的格式 2 3 函数模板的原理 2 4 函数模板的实例化 2 5 模板参数的匹配原则 3 类模板 3 1 类模板的概念 3 2 类模板的格式 3 3 类模
  • Android进程间通信(IPC)机制Binder介绍

    转载自 http blog csdn net luoshengyang article details 6618363 在Android系统中 每一个应用程序都是由一些Activity和Service组成的 这些Activity和Servi
  • 2012-03-25 17:31 以太网中的UDP编程:udp分包问题

    1 在进行UDP编程的时候 我们最容易想到的问题就是 一次发送多少bytes好 当然 这个没有唯一答案 相对于不同的系统 不同的要求 其得到的答案是不一样的 我这里仅对 像ICQ一类的发送聊天消息的情况作分析 对于其他情况 你或许也能得到一
  • ffmpeg常用编解码命令

    ffmpeg常用编解码命令 1 ffplay exe 1 播放MP4文件 指定标题以及播放分辨率 ffplay exe window title 视频监控 x 720 y 576 i 2019 09 19 14 21 20 Ch7 mp4
  • 数组17--机器人的运动范围

    数组17 机器人的运动范围 jz66 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 地上有一个m行和n列的方格 一个机器人从坐标0 0的格子开始移动 每一次只能向左 右 上 下四个方向移动一格 但是不能进入行坐标和列坐标的数
  • Qt重绘之update,repaint详解

    Qt里面的重绘和Windows编程里面的重绘差不多 但是Qt的重绘更有特色 更加智能 在讲之前 先说说paintEvent paintEvent 是一个虚函数槽 slot 子类可以对父类的paintEvent进行重写 当调用update r