本系列基于6.6.0 官方示例
实现了什么功能
Raster是 光栅、栅格的意思
使用 QWindow 类创建一个窗口,然后使用 QBackingStore 类在窗口上绘制图形。
用到哪些重要的类
The QBackingStore class provides a drawing area for QWindow
可以只更新部分区域。
使用方法
1
2
3
4
5
6
7
8
m_backingStore->beginPaint(rect);
QPaintDevice *device = m_backingStore->paintDevice();
QPainter painter(device);
painter画完之后,需要调用
m_backingStore->endPaint();
m_backingStore->flush(rect);
部分源码解析
qt_standard_project_setup()是一个 CMake 函数,用于设置 Qt 项目的一些标准配置。
具体来说,qt_standard_project_setup() 函数会执行以下操作:
1
2
3
4
5
6
7
8
调用 find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) 指令,查找并加载 Qt5 的模块。
调用 set(CMAKE_AUTOMOC ON) 指令,启用自动 MOC(Meta-Object Compiler)功能,用于处理 Qt 元对象系统的代码生成。
调用 set(CMAKE_AUTORCC ON) 指令,启用自动 RCC(Resource Compiler)功能,用于处理 Qt 资源文件的编译。
调用 set(CMAKE_AUTOUIC ON) 指令,启用自动 UIC(User Interface Compiler)功能,用于处理 Qt 用户界面文件的代码生成。
调用 set(CMAKE_INCLUDE_CURRENT_DIR ON) 指令,将当前目录添加到头文件搜索路径中。
调用 set(CMAKE_CXX_STANDARD 11) 指令,设置 C++ 标准为 C++11。
QScopedPointer<QBackingStore> m_backingStore; 不需要赋值nullptr进行初始化
它源码里面有个方法 renderLater() 没有调用。供其它例子使用的(在示例2中用到)。
“QWindow”这个字符串为何要用QStringLiteral包装?
它会在编译期生成,而不是运行期生成,这样可以提高运行效率。
用于创建一个 Unicode 字符串常量。使用 QStringLiteral 可以确保字符串在编译时被转换为 Unicode 编码,从而避免了运行时的转换开销和潜在的编码问题。
QBackingStore: manage the window’s back buffer for QPainter based graphics
show后会收到exposeEvent,contains the exposed sub-region,窗口被遮挡也会收到
requestUpdate异步渲染:让重绘发生在事件循环中