前言
最后的一个解读QPainter源码的系列,剩下的源码全部都是内联函数,自己看看就好。
正文

渲染相关
-
void setRenderHint(RenderHint hint, bool on = true);- 功能: 启用或禁用特定的渲染提示。
- 参数:
hint:指定要设置的渲染提示,类型为QPainter::RenderHint。例如,QPainter::Antialiasing可以启用抗锯齿。on:布尔值,默认为true。true启用提示,false禁用提示。
-
void setRenderHints(RenderHints hints, bool on = true);-
功能: 启用或禁用一组渲染提示。
-
参数:
hints:指定要设置的渲染提示的集合,类型为QPainter::RenderHints。这是一个按位标志的枚举,可以包含多个提示。on:布尔值,默认为true。true启用提示,false禁用提示。
-
用法: 要同时启用抗锯齿和高质量的绘制,可以调用
setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform)。
-
-
RenderHints renderHints() const;-
功能: 获取当前启用的渲染提示。
-
返回值: 返回一个
QPainter::RenderHints类型的值,表示当前启用的所有渲染提示的集合。 -
用法: 可以使用此方法检查当前启用的渲染提示。例如,如果启用了抗锯齿,可以使用
renderHints() & QPainter::Antialiasing来测试。
-
-
inline bool testRenderHint(RenderHint hint) const { return renderHints() & hint; }-
功能: 测试特定的渲染提示是否启用。
-
参数:
hint:要测试的渲染提示,类型为QPainter::RenderHint。
-
返回值: 如果指定的渲染提示已启用,则返回
true;否则返回false。 -
用法: 检查抗锯齿是否启用,可以调用
testRenderHint(QPainter::Antialiasing)。
-
渲染就不说了,在前面的章节中有讲。
paintEngine
-
QPaintEngine *paintEngine() const;- 功能: 获取
QPainter使用的QPaintEngine对象。 - 返回值: 返回
QPaintEngine指针。QPaintEngine是用于处理绘制操作的引擎,具体实现可能不同(例如,QPainter的不同绘制设备使用不同的QPaintEngine实现)。
- 功能: 获取
void testPaintEngine(QPainter &painter) {
QPaintEngine *engine = painter.paintEngine();
if (engine) {
qDebug() << "Paint Engine Type:" << engine->type();
if (engine->type() == QPaintEngine::Raster) {
qDebug() << "The paint engine is QRasterPaintEngine.";
}
} else {
qDebug() << "No paint engine is associated with this QPainter.";
}
}
#if QT_DEPRECATED_SINCE(5, 13) #endif
这部分是过时的函数,现在用QWidget::render()来代替。用于将绘制重定向到另一个绘制设备。
系统自带原生绘图
-
void beginNativePainting();-
功能: 开始原生绘制操作。这可以用于在
QPainter上下文中进行非 Qt 的原生绘制操作,例如直接调用操作系统 API 进行绘制。 -
用法: 调用此方法后,可以进行原生绘制操作,完成后需要调用
endNativePainting()恢复QPainter的绘制状态。
-
-
void endNativePainting();-
功能: 结束原生绘制操作,恢复
QPainter的绘制状态。 -
用法: 在调用
beginNativePainting()进行原生绘制后,调用此方法以恢复QPainter的正常绘制状态。
-
下面一部分是私有成员
Q_DISABLE_COPY()宏
Q_DISABLE_COPY(QPainter)禁用QPainter类的复制构造函数和赋值操作符,防止QPainter对象被复制。QPainter对象通常不应该被复制,因为它们管理与绘制设备的状态,复制可能会导致未定义的行为。
智能指针
QScopedPointer<QPainterPrivate> d_ptr;:声明了一个智能指针QPainterPrivate是QPainter类的私有数据类。d_ptr 用于在QPainter类中管理QPainterPrivate实例,通常是为了实现数据的封装和分离。
friend class
- 这一部分是声明友元类,声明友元后
QPainter可以访问相关类的私有成员。
Q_DECLARE_TYPEINFO();宏
Q_DECLARE_TYPEINFO(QPainter::PixmapFragment, Q_RELOCATABLE_TYPE);声明QPainter::PixmapFragment类的类型信息,标记为可重定位的类型。这有助于 Qt 的元对象系统和类型识别系统。
Q_DECLARE_OPERATORS_FOR_FLAGS()宏
Q_DECLARE_OPERATORS_FOR_FLAGS(QPainter::RenderHints)声明QPainter::RenderHints枚举的按位操作符,使得可以使用位运算符(例如|、&)对RenderHints类型的值进行操作。

















![[激光原理与应用-126]:傅里叶变化与频域分析](https://i-blog.csdnimg.cn/direct/d2580377a7564beebf89d52db4f8295a.png)
