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 类型的值进行操作。
相关推荐
KobeSacre14 分钟前
DelayQueue 源码
java·开发语言
han_hanker27 分钟前
重新认识枚举enum
开发语言
鹏易灵1 小时前
C++——8.移动语义初探(移动构造、移动赋值)
开发语言·c++·php
2601_962341301 小时前
计算机毕业设计之jsp考研在线复习平台
java·大数据·开发语言·hadoop·python·考研·课程设计
凯瑟琳.奥古斯特1 小时前
力扣1008:前序重建BST
开发语言·c++·算法·leetcode·职场和发展
luoyayun3612 小时前
Qt + FFmpeg 音频工具:重采样实现
qt·ffmpeg·重采样
2zcode2 小时前
项目文档:基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
月疯2 小时前
np.where()[0]的用法
开发语言·python·numpy
z落落2 小时前
C#五大加密算法(AES、DES、MD5、RSA、SHA)
开发语言·c#
namexingyun2 小时前
Scaling Law bug实战启示:从“虚胖“到“精瘦“的算力效率革命
开发语言·网络·人工智能·bug·ai编程