首页 Qt官方示例解析系列1:Raster Window
文章
取消

Qt官方示例解析系列1:Raster Window

本系列基于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异步渲染:让重绘发生在事件循环中

参考:

https://doc.qt.io/qt-6/qtgui-rasterwindow-example.html

本文由作者按照 CC BY 4.0 进行授权