Qt:玩转QPainter序列六

2024-08-27 13:28
文章标签 qt 玩转 序列 qpainter

本文主要是介绍Qt:玩转QPainter序列六,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

继续看源码。

正文

剩下的大部分都是画各种图形的函数,它们一般都有多个重载版本,我就不一 一介绍使用了,只挑其中的一部分使用一下。
在这里插入图片描述
QPainter 类中,这些方法涉及到绘图的各种功能,主要用于设置视图变换、绘制不同类型的图形(如路径、点、线、矩形)等。下面是这些方法的详细解释:

1. 视图变换设置

  • QRect window() const;

    • 返回当前的窗口矩形(绘图区域的逻辑坐标系)。
  • void setWindow(const QRect &window);

    • 设置窗口矩形,定义绘图的逻辑坐标系范围。
  • inline void setWindow(int x, int y, int w, int h);

    • 以整数参数设置窗口矩形。
  • QRect viewport() const;

    • 返回当前的视口矩形(绘图区域的实际坐标系范围)。
  • void setViewport(const QRect &viewport);

    • 设置视口矩形,定义绘图的实际显示区域。
  • inline void setViewport(int x, int y, int w, int h);

    • 以整数参数设置视口矩形。
  • void setViewTransformEnabled(bool enable);

    • 启用或禁用视图变换。启用后,绘图时会应用视图变换。
  • bool viewTransformEnabled() const;

    • 返回视图变换是否启用。

关于上述这些函数是用于设置窗口与物理坐标系的,我有篇博客有讲坐标系Qt坐标系统之三个坐标系和两个变换

2. 绘制路径

  • void strokePath(const QPainterPath &path, const QPen &pen);

    • 使用 QPen 描边 QPainterPath 对象。
  • void fillPath(const QPainterPath &path, const QBrush &brush);

    • 使用 QBrush 填充 QPainterPath 对象。
  • void drawPath(const QPainterPath &path);

    • 绘制 QPainterPath 对象,不进行填充或描边。

例子

void PaintWidget::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);//设置抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);// 1. 创建 QPainterPath 对象QPainterPath path;// 添加一个矩形到路径中path.addRect(50, 50, 200, 100);// 添加一个椭圆到路径中path.addEllipse(100, 75, 100, 50);// 2. 创建 QPen 对象用于描边,蓝色描边,宽度为 3QPen pen(Qt::blue, 3);// 使用 QPen 描边路径painter.strokePath(path, pen);// 3. 创建 QBrush 对象用于填充,黄色填充QBrush brush(Qt::yellow);// 使用 QBrush 填充路径painter.fillPath(path, brush);// 4. 绘制路径(不进行填充或描边)// 绘制路径的颜色和样式取决于当前设置的 QPainter 状态,设置描边颜色为绿色painter.setPen(Qt::green);// 仅绘制路径painter.drawPath(path);}

在这里插入图片描述

3. 绘制点

  • inline void drawPoint(const QPointF &pt);

    • 绘制一个点,参数是 QPointF(浮点坐标)。
  • inline void drawPoint(const QPoint &p);

    • 绘制一个点,参数是 QPoint(整数坐标)。
  • inline void drawPoint(int x, int y);

    • 绘制一个点,参数是整数坐标 (x, y)
  • void drawPoints(const QPointF *points, int pointCount);

    • 绘制一组点,参数是 QPointF 数组和点的数量。
  • inline void drawPoints(const QPolygonF &points);

    • 绘制多边形的点,参数是 QPolygonF 对象。
  • void drawPoints(const QPoint *points, int pointCount);

    • 绘制一组点,参数是 QPoint 数组和点的数量。
  • inline void drawPoints(const QPolygon &points);

    • 绘制多边形的点,参数是 QPolygon 对象。

例子

void PaintWidget::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);//设置抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置粗一点QPen pen;pen.setWidth(10);// 创建点的数组QPoint points[] = {QPoint(50, 50),QPoint(100, 100),QPoint(150, 150),QPoint(200, 200),QPoint(250, 250)};int pointCount = sizeof(points) / sizeof(points[0]);// 设置画笔颜色pen.setColor(Qt::red);painter.setPen(pen);// 绘制点painter.drawPoints(points, pointCount);// 创建一个 QPolygon 对象,包含一组点QPolygon polygon;polygon << QPoint(30, 30)<< QPoint(80, 80)<< QPoint(130, 130)<< QPoint(180, 180)<< QPoint(230, 230);// 设置画笔颜色pen.setColor(Qt::green);painter.setPen(pen);// 绘制点painter.drawPoints(polygon);}

在这里插入图片描述

4. 绘制线

  • inline void drawLine(const QLineF &line);

    • 绘制一条线段,参数是 QLineF(浮点坐标)。
  • inline void drawLine(const QLine &line);

    • 绘制一条线段,参数是 QLine(整数坐标)。
  • inline void drawLine(int x1, int y1, int x2, int y2);

    • 绘制一条线段,参数是起点 (x1, y1) 和终点 (x2, y2) 的整数坐标。
  • inline void drawLine(const QPoint &p1, const QPoint &p2);

    • 绘制一条线段,参数是起点和终点的 QPoint 对象。
  • inline void drawLine(const QPointF &p1, const QPointF &p2);

    • 绘制一条线段,参数是起点和终点的 QPointF 对象。
  • void drawLines(const QLineF *lines, int lineCount);

    • 绘制一组线段,参数是 QLineF 数组和线段的数量。
  • inline void drawLines(const QVector<QLineF> &lines);

    • 绘制一组线段,参数是 QVector<QLineF> 对象。
  • void drawLines(const QPointF *pointPairs, int lineCount);

    • 绘制一组线段,参数是 QPointF 数组中的点对和线段的数量。
  • inline void drawLines(const QVector<QPointF> &pointPairs);

    • 绘制一组线段,参数是 QVector<QPointF> 对象中的点对。
  • void drawLines(const QLine *lines, int lineCount);

    • 绘制一组线段,参数是 QLine 数组和线段的数量。
  • inline void drawLines(const QVector<QLine> &lines);

    • 绘制一组线段,参数是 QVector<QLine> 对象。
  • void drawLines(const QPoint *pointPairs, int lineCount);

    • 绘制一组线段,参数是 QPoint 数组中的点对和线段的数量。
  • inline void drawLines(const QVector<QPoint> &pointPairs);

    • 绘制一组线段,参数是 QVector<QPoint> 对象中的点对。

例子

void PaintWidget::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);//设置抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置粗一点QPen pen;pen.setWidth(5);// 1. 使用 QLine 数组绘制线段QLine linesArray[] = {QLine(10, 10, 100, 10),QLine(10, 20, 100, 20),QLine(10, 30, 100, 30)};int lineCountArray = sizeof(linesArray) / sizeof(linesArray[0]);pen.setColor(Qt::red);painter.setPen(pen);painter.drawLines(linesArray, lineCountArray);// 2. 使用 QVector<QLine> 对象绘制线段QVector<QLine> linesVector;linesVector << QLine(10, 50, 100, 50)<< QLine(10, 60, 100, 60)<< QLine(10, 70, 100, 70);pen.setColor(Qt::green);painter.setPen(pen);painter.drawLines(linesVector);// 3. 使用 QPoint 数组绘制线段(点对)QPoint pointsArray[] = {QPoint(10, 90), QPoint(100, 90),QPoint(10, 100), QPoint(100, 100),QPoint(10, 110), QPoint(100, 110)};int pointCountArray = sizeof(pointsArray) / sizeof(pointsArray[0]) / 2;pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLines(pointsArray, pointCountArray);// 4. 使用 QVector<QPoint> 对象绘制线段(点对)QVector<QPoint> pointsVector;pointsVector << QPoint(10, 130) << QPoint(100, 130)<< QPoint(10, 140) << QPoint(100, 140)<< QPoint(10, 150) << QPoint(100, 150);pen.setColor(Qt::gray);painter.setPen(pen);painter.drawLines(pointsVector);}

在这里插入图片描述

5. 绘制矩形

  • inline void drawRect(const QRectF &rect);

    • 绘制一个矩形,参数是 QRectF(浮点坐标)。
  • inline void drawRect(int x1, int y1, int w, int h);

    • 绘制一个矩形,参数是整数坐标 (x1, y1) 和宽高 (w, h)
  • inline void drawRect(const QRect &rect);

    • 绘制一个矩形,参数是 QRect(整数坐标)。

绘制矩形本篇就不说了,留到下一个序列一起说。

这篇关于Qt:玩转QPainter序列六的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111799

相关文章

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自