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 类型的值进行操作。
相关推荐
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----5 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024065 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海6 小时前
scala String
大数据·开发语言·scala
qq_327342736 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍6 小时前
Scala的Array数组
开发语言·后端·scala