Qt官方示例AnalogClockWindow源码阅读并理解

发布时间:2026/10/24 0:53:01
Qt官方示例AnalogClockWindow源码阅读并理解 1. RasterWindow 运行结果2. AnalogClockWindow 运行结果3. 最重要是这个工程管理 将已有得工程代码的类引入新工程4. 重写render和timerEvent5. 窗口第一次显示、被遮挡后重新露出来时触发6. 窗口大小改变调整缓冲区大小。7. 统一接收事件内部分发处理。8. renderNow 马上重绘 renderLater 走事件9. 触发时机用户拉大窗口 → Qt 触发resizeEvent()m_backingStore-resize()重新分配画布内存。窗口暴露触发exposeEvent()直接调用renderNow()立刻画出第一帧时钟。定时器每 1 秒触发调用renderLater()只是调用requestUpdate()投递事件函数马上返回事件循环空闲收到UpdateRequest调用renderNow()刷新时钟画面。10 . 两种方式处理10.1 延时绘图业务代码调用 renderLater()↓requestUpdate() → 往事件队列扔 QEvent::UpdateRequest↓函数立刻返回不画图等待事件循环Qt事件循环分发事件 → RasterWindow::event()捕获UpdateRequest↓调用 renderNow() 【进入真正绘制】↓renderNow内部调用 render(painter) 【执行你的绘图代码画时钟、指针、刻度】↓绘制完成 flush()画面出现在屏幕10.2 立即绘图窗口暴露/重新显示 → exposeEvent↓直接调用 renderNow() 不走事件队列同步立刻画↓renderNow()内部调用 render(painter)↓flush上屏总结总结1. 工程管理子工程Qt中可以使用subdirs模板管理多个子工程一个pro主项目管理多个子pri/pro模块。子工程可以把功能拆分实现代码模块化方便复用例如示例中rasterwindow作为基础模块给时钟示例调用。2. 绘图和事件QWindow底层光栅绘图 RasterWindow核心类QWindow底层原生窗口非QWidget本身不能直接QPainter绘图。QBackingStore离屏光栅缓冲区所有绘制先画在内存最后flush刷新到屏幕防止闪烁。三个绘图函数关系renderLater()异步重绘调用requestUpdate()投递UpdateRequest事件只发请求不执行绘图等价QWidget的update()。renderNow()同步立即绘制管理QBackingStore缓冲区、创建QPainter内部调用虚函数render()最后flush上屏等价QWidget的repaint()。render(QPainter *)虚回调钩子函数子类重写只写业务绘图代码translate、rotate、绘制图形不管理缓冲区。调用链路renderLater()→ 投递更新事件 → event捕获事件 →renderNow()→render(painter)→ flush屏幕窗口事件resizeEvent窗口大小变化调整QBackingStore缓冲区内存大小不负责绘图。exposeEvent窗口显示、解除遮挡调用renderNow()立刻绘制第一帧画面。event()捕获QEvent::UpdateRequest事件触发renderNow()执行绘制。坐标系关键点QWindow绘图Y轴向下painter.rotate(正数)坐标系逆时针旋转视觉上图形顺时针偏转。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询