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 实现)。
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 类型的值进行操作。
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值