前言
最后的一个解读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
类型的值进行操作。