Qt:玩转QPainter序列十

前言

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

正文

渲染相关

  • void setRenderHint(RenderHint hint, bool on = true);

    • 功能: 启用或禁用特定的渲染提示。
    • 参数 :
      • hint:指定要设置的渲染提示,类型为 QPainter::RenderHint。例如,QPainter::Antialiasing 可以启用抗锯齿。
      • on:布尔值,默认为 truetrue 启用提示,false 禁用提示。
  • void setRenderHints(RenderHints hints, bool on = true);

    • 功能: 启用或禁用一组渲染提示。

    • 参数:

      • hints:指定要设置的渲染提示的集合,类型为 QPainter::RenderHints。这是一个按位标志的枚举,可以包含多个提示。
      • on:布尔值,默认为 truetrue 启用提示,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 实现)。
cpp 复制代码
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 类型的值进行操作。
相关推荐
索迪迈科技19 小时前
java后端工程师进修ing(研一版‖day42)
java·开发语言·学习·算法
Chris.Yuan77020 小时前
Java代理模式详解
java·开发语言·代理模式
Forever_Hopeful20 小时前
【C 语言生成指定范围随机数(整数 + 小数):原理、实现与避坑指南】
服务器·c语言·开发语言
午夜游鱼20 小时前
Go 泛型实战:一行代码封装 sync.Pool,性能与安全兼得
开发语言·安全·golang
索迪迈科技20 小时前
STL库——map/set(类函数学习)
开发语言·c++·学习
ForteScarlet21 小时前
Kotlin 2.2.20 现已发布!下个版本的特性抢先看!
android·开发语言·kotlin·jetbrains
anlogic21 小时前
Java基础 9.10
java·开发语言·算法
yongche_shi21 小时前
第二篇:Python“装包”与“拆包”的艺术:可迭代对象、迭代器、生成器
开发语言·python·面试·面试宝典·生成器·拆包·装包
Elastic 中国社区官方博客21 小时前
介绍 Python Elasticsearch Client 的 ES|QL 查询构建器
大数据·开发语言·数据库·python·elasticsearch·搜索引擎·全文检索
Hóng xīng qiáo21 小时前
swVBA自学笔记014、Lisp适合对SolidWorks进行二次开发吗 ?
开发语言·笔记·lisp