三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

QML与QWidget的流畅度

QML与QWidget的流畅度

简单来说:

QWidget 是 CPU 绘图时代的产物,而 QML(Qt Quick) 是 GPU 绘图时代的产物。

所以在动画、透明效果、缩放、旋转、大量元素移动等场景下,QML 往往比 QWidget 流畅得多。


1. QWidget 是怎么画出来的?

先看 QWidget 的工作方式。

例如:

QPushButton QLabel QTableView QTreeView

这些控件都继承自 QWidget。

当窗口需要刷新时:

paintEvent()

会被调用。

例如:

void MyWidget::paintEvent(QPaintEvent *) { QPainter p(this); p.drawRect(...); p.drawText(...); p.drawPixmap(...); }

流程:

CPU ↓ QPainter绘图 ↓ 生成像素 ↓ 写入内存缓冲区 ↓ 提交给窗口系统 ↓ 显示器

本质上:

QWidget = CPU Raster Paint

即:

CPU负责画每一个像素

2. QWidget 为什么动画容易卡?

假设一个按钮从:

x=0

移动到:

x=500

动画 60FPS。

每一帧:

清空背景 ↓ 重新画按钮 ↓ 重新画文字 ↓ 重新画边框 ↓ 重新
← 返回列表