当前位置: 首页 > news >正文

没有主机怎么做自己的网站湖南网站备案

没有主机怎么做自己的网站,湖南网站备案,互联网创业有哪些项目可以做,中山市建设局网站Qt GUI高性能缓存实现核心思想 (双缓冲技术) 一、 为什么需要缓存? 核心: paintEvent 函数在每次界面刷新时都会被调用。如果我们在 paintEvent 内部执行复杂的、耗时的绘制操作(如加载大图片、绘制大量图元、计算复杂渐变等),当刷…

Qt GUI高性能缓存实现核心思想 (双缓冲技术)

一、 为什么需要缓存?
  • 核心: paintEvent 函数在每次界面刷新时都会被调用。如果我们在 paintEvent 内部执行复杂的、耗时的绘制操作(如加载大图片、绘制大量图元、计算复杂渐变等),当刷新频率很高时(如动画、拖动),就会导致大量的CPU资源消耗,从而引起界面卡顿。
二、 解决方案的核心思想:“空间换时间”
  • 核心思想: 双缓冲 (Double Buffering)。用一块额外的内存(QPixmap 对象),来一次性地存储昂贵绘制操作的结果。之后每次刷新,而是直接将这个已经画好的结果“贴”到屏幕上。
  • 本质: 将多次的“慢速创作”(paintEvent里的复杂绘制)转变为一次“慢速创作” + 多次的“极速复制”(drawPixmap)。
三、 实现缓存的“三步曲”

第一步:准备“后台画布” (成员变量)

  1. 在自定义控件的头文件 (.h) 中,声明一个 QPixmap 类型的成员变量,作为我们的“后台画布”或“缓存”。
    private:QPixmap m_cache;
    

第二步:创建“创作函数” (更新缓存)

  1. 在源文件 (.cpp) 中,创建一个私有的辅助函数,专门负责在“后台画布”上进行所有昂贵的绘制操作。
    void CustomWidget::updateCache()
    {// 1. 初始化画布:根据当前控件大小创建一张等大的Pixmapm_cache = QPixmap(size());// 2. 【关键】清空画布:用透明色填充,确保画布是干净的,并为不规则图形提供透明背景m_cache.fill(Qt::transparent);// 3. 创建画家,指定在“后台画布”上作画QPainter painter(&m_cache);painter.setRenderHint(QPainter::Antialiasing); // 开启抗锯齿// 4. 【核心】在这里执行所有昂贵的、复杂的绘制指令...// painter.drawPixmap(...);// painter.drawRoundedRect(...);// ...
    }
    

第三步:改造 paintEvent (执行“印刷”)

  1. 重写 paintEvent 函数,将其职责从“创作”转变为“印刷”。
    void CustomWidget::paintEvent(QPaintEvent *event)
    {QPainter painter(this); // 创建画家,指定在“屏幕”(this)上作画// 【核心】不再执行任何复杂绘制,只做一步:// 把已经画好的“后台画布” (m_cache),瞬间“贴”到屏幕的左上角 (0, 0)。painter.drawPixmap(0, 0, m_cache);
    }
    
四、 触发缓存更新的“两大时机”
  1. 时机一:控件尺寸固定不变时

    • 策略: 在构造函数的末尾,调用一次 updateCache() 即可。
    • 原理: 尺寸永远不变,只在控件诞生时“创作”一次,之后就可以一劳永逸地“印刷”了。
    • 示例:
      CustomInputWidget::CustomInputWidget(...) {setFixedSize(...);// ...updateCache(); // 在构造函数里一次性生成缓存
      }
      
  2. 时机二:控件尺寸可能发生变化时

    • 策略: 重写 resizeEvent(QResizeEvent *event) 事件处理器,在函数体内调用 updateCache()
    • 原理: resizeEvent 会在控件的尺寸每次发生变化时被自动调用。我们必须在这个时机废弃旧的、尺寸不匹配的缓存,并根据新尺寸重新“创作”一份新的缓存。
    • 示例:
      void FramedWidget::resizeEvent(QResizeEvent *event) {updateCache(); // 尺寸变了,重建缓存QWidget::resizeEvent(event); // 调用父类实现是好习惯
      }
      
    • 补充: 在这种情况下,我们还需要在 paintEvent 的开头加一个保护,防止在第一次显示、resizeEvent 还未被调用时缓存为空。
      void FramedWidget::paintEvent(...) {if (m_cache.isNull()) {updateCache(); // 如果缓存是空的,先创建一次}// ... 贴图 ...
      }
      

http://www.dtcms.com/a/498164.html

相关文章:

  • 一个网站建设初期的成本关键词筛选
  • 圣辉友联网站建设做网站是用什么语言
  • 济宁网站建设第一品牌网站app开发费用
  • 建设银行宁波分行 招聘网站google收录查询
  • 徐州教育学会网站建设手机编写html网页的软件
  • 做网站大概要多久一分钟企业宣传片怎么拍
  • 网站建设的结尾新余市建设局网站
  • 做医疗设备的网站网站制作 成都
  • 网站建设 成都如何进行网站建设
  • 网站建设费属于服务类么自己做网站需要哪些软件
  • 建设一家网站多少钱和一起做网店差不多的网站
  • 网站建设需要材料h5网站开发公司
  • 做网站游燕种子库
  • 广西高端网站建设怎么给一个网站做搜索功能
  • 网站怎样设计网址甘肃省城乡住房建设厅网站首页
  • 屏南网站建设兼职无锡互联网公司排名
  • 梅州市住房与城乡建设局网站免手机微网站
  • 网站备案技巧全国网站建设公司有多少家
  • 国内网站设计作品欣赏特效网站模板
  • 公司建设一个网站有什么好处网站运营发展前景
  • 网站备案是什么一回事国外网站设计大全
  • 网站做广告如何做帐wordpress 淘宝 采集
  • 房山建站公司高效利用js的代码库
  • 鲅鱼圈规划建设局网站临沂网站改版
  • wordpress 网站很慢公司外宣网站
  • 如何查找昆明公司的网站企业网站必须实名认证
  • 朔州路桥建设有限责任公司网站建设项目一次公示网站
  • 深圳网站制作公司售后在网站用什么做页面布局
  • 我的世界怎么做的好看视频网站做网站需要考虑什么
  • 自建个网站怎么做网站后期维护需要怎么做