绘制点、折线、多边形
使用QPolygonF类
基本原理
- 需要使用到的QPainter类的工具
- 绘制点
drawPoint(const QPoint &position)
drawPoint(const QPoint &position)
drawPoint(int x, int y)
- 绘制多个点
drawPoints(const QPointF *points, int pointCount)
drawPoints(const QPoint *points, int pointCount)
drawPoints(const QPolygonF &points)
drawPoints(const QPolygon &points)
- 绘制凸多边形
drawConvexPolygon(const QPointF *points,int pointCount)
drawConvexPolygon(const QPoint *point,int pointCount)
drawConvexPolygon(const QPolygon &polygon)
drawConvexPolygon(const QPolygon &polygon)
- 绘制折线
drawPolyline(const QPointF *pointf,int pointCount)
drawPolyline(const QPoint *points, int pointCount)
drawPolyline(const QPolygonF &ploy)
drawPolyline(const QPolygon &ploy)
- 绘制多边形
drawPolygon(const QPointF *points,int pointCount,Qt::FillRule fullRule =Qt::OddEvenFill)
drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill)
drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill)
drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
- 绘制点
- 绘制折线和多边形有两种方法
- 根据提供的一系列坐标点,和折线的段数,依次把提供的坐标点相连,从而绘制成指定段数的折线。一系列坐标点可以通过数组来提供
- 提供一个
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(); }
};