【qt】绘制点、折线、多边形

绘制点、折线、多边形

使用QPolygonF类

基本原理

  1. 需要使用到的QPainter类的工具
    1. 绘制点
      1. drawPoint(const QPoint &position)
      2. drawPoint(const QPoint &position)
      3. drawPoint(int x, int y)
    2. 绘制多个点
      1. drawPoints(const QPointF *points, int pointCount)
      2. drawPoints(const QPoint *points, int pointCount)
      3. drawPoints(const QPolygonF &points)
      4. drawPoints(const QPolygon &points)
    3. 绘制凸多边形
      1. drawConvexPolygon(const QPointF *points,int pointCount)
      2. drawConvexPolygon(const QPoint *point,int pointCount)
      3. drawConvexPolygon(const QPolygon &polygon)
      4. drawConvexPolygon(const QPolygon &polygon)
    4. 绘制折线
      1. drawPolyline(const QPointF *pointf,int pointCount)
      2. drawPolyline(const QPoint *points, int pointCount)
      3. drawPolyline(const QPolygonF &ploy)
      4. drawPolyline(const QPolygon &ploy)
    5. 绘制多边形
      1. drawPolygon(const QPointF *points,int pointCount,Qt::FillRule fullRule =Qt::OddEvenFill)
      2. drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
      3. drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)
      4. drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
  2. 绘制折线和多边形有两种方法
    1. 根据提供的一系列坐标点,和折线的段数,依次把提供的坐标点相连,从而绘制成指定段数的折线。一系列坐标点可以通过数组来提供
    2. 提供一个QPolygonF或QPolygon绘制一个折线或多边形,这个两个类的本质也是提供一系列的点,只是使用这两个类提供了一些方便的函数

示例

绘制五角星

#pragma once

#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif


#include <QtWidgets>

class DrawStar :public QWidget
{
	Q_OBJECT
private:
	void init() {

	}
protected:
	void paintEvent(QPaintEvent *event) override {
		Q_UNUSED(event);
		QPainter painter;

		painter.begin(this);
		painter.setPen(QPen(Qt::black, 4));

		const QPointF points[] = {
			QPointF(100,100), QPointF(200,100), QPointF(115,150), QPointF(150,65),QPointF(185,150)
		};

		int pointCount = sizeof(points) / sizeof(points[0]);

		//painter.drawPolyline(points, pointCount);
		painter.drawPolygon(points, pointCount);

		displayCroods(painter,points,pointCount);
		
		painter.end();
	}
private slots:
	void displayCroods(QPainter &painter, const QPointF *points,int pointCount) {
		 QVector<QPointF> pointsV;
		 for (int i=0;i <pointCount;++i){
			 pointsV.append(points[i]);
		 }
		 displayCroods(painter, pointsV);
	}

	void displayCroods(QPainter &painter, const QVector<QPointF> &points) {
		for (int i =0;i <points.size();++i){
			const QPointF point = points.at(i);
			painter.drawText(point.x() + 2, point.y() - 1,
				QString("(%1,%2)").arg(point.x()).arg(point.y()));
		}

	}
public:
	DrawStar(QWidget *p = nullptr) : QWidget(p) { init(); }
};
Qt中,绘制polyline(折线)可以通过QPainter类来实现,其中折线可以包含直线、圆弧等不同的线段。下面我将为你介绍如何使用QPainter在Qt绘制包含直线和圆弧的polyline。 首先,你需要一个QPainter对象,通常在QWidget的paintEvent事件中获取它。以下是一个简单的示例代码,展示了如何使用QPainter来绘制polyline: ```cpp void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setPen(Qt::black); // 设置画笔颜色为黑色 // 创建一个多边形列表 QList<QPoint> points; points << QPoint(10, 10) // 添加起 << QPoint(100, 10) // 添加直线终 << QPoint(100, 100); // 添加圆弧终,将作为直线的终 // 绘制polyline painter.drawPolyline(points); // 首先绘制直线部分 // 添加圆弧起(圆弧的起与前面直线的终重合) points << QPoint(100, 100); // 绘制圆弧 // 参数分别是:圆弧起、半径、起始角度、终止角度、绘制方向 painter.drawArc(QRect(50, 50, 100, 100), 16*90, 16*90); // 从(100, 100)开始,绘制一个90度的圆弧 // 如果需要闭合折线,可以再次调用drawLine或者drawPolyline // painter.drawLine(points.last(), points.first()); } ``` 在上面的代码中,首先我们创建了一个QPainter对象,并设置了画笔颜色。然后,我们创建了一个QList<QPoint>,它包含了折线中所有的坐标。我们使用`drawPolyline`方法绘制折线的直线部分,然后在这个折线的基础上添加了一个圆弧起,并使用`drawArc`方法绘制了一个圆弧。 注意:圆弧的绘制依赖于一个矩形区域,该区域定义了圆弧的边界。在示例中,我们使用`QRect(50, 50, 100, 100)`定义了一个正方形区域作为圆弧的边界,然后通过角度值指定圆弧的起始角度和跨度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值