✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
「QT」QT5程序设计 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
「Py」Python程序设计 | 「Math」探秘数学世界 |
目录
Qt中的QPolygon类
一、引言
QPolygon是Qt图形库中的一个重要类,它用于表示和操作多边形。在Qt的图形系统中,QPolygon类提供了丰富的属性和方法,使得开发者可以方便地对多边形进行创建、变换、绘制等操作。QPolygon类不仅支持基本的点集操作,还支持诸如旋转、缩放等图形变换,以及多边形的交集、并集、差集等复杂操作。
官方文档:https://doc.qt.io/qt-5/qpolygon.html
二、使用范围
QPolygon类广泛应用于Qt图形界面的开发中,特别是在需要绘制和操作多边形形状的场合。无论是简单的矩形、三角形,还是复杂的不规则多边形,QPolygon都能提供有效的支持。此外,QPolygon还可以与其他Qt图形类(如QPainter、QTransform等)配合使用,实现更复杂的图形绘制和变换效果。
三、类的头文件
QPolygon类的头文件是#include <QPolygon>
。在使用QPolygon类之前,需要在源文件中包含这个头文件。继承于QVector<QPoint>
。例如:
cpp
#include <QPolygon>
四、类的构造介绍
QPolygon类提供了多个构造函数,用于创建不同形式的多边形。以下是一些常用的构造函数:
-
QPolygon()
创建一个空的多边形。
-
QPolygon(const QVector &points)
根据给定的点集创建一个多边形。
-
QPolygon(const QRect &rectangle, bool closed = false)
根据给定的矩形创建一个多边形。如果
closed
为true
,则多边形的第五个点设置为矩形的左上角。 -
QPolygon(const QPointF& point1, const QPointF& point2, const QPointF& point3, ...)
根据给定的点创建一个多边形。这是一个可变参数构造函数,可以接收任意数量的点。
-
QPolygon(int n, const QPointF& point1, const QPointF& point2, ...)
根据给定的顶点和数量创建一个多边形。这也是一个可变参数构造函数。
-
QPolygon(const QPolygon &other)
复制一个已有的多边形。
五、共有函数介绍
QPolygon类提供了许多共有函数,用于操作多边形的顶点和属性。以下是一些常用的函数:
-
int size() const
返回多边形中点的数量。
-
QPoint point(int index) const
返回指定索引处的点。
-
void setPoint(int index, const QPoint &point)
设置指定索引处的点。
-
*void putPoints(int index, int nPoints, const QPoint points)
从指定索引开始,将给定的点集添加到多边形中。
-
QRect boundingRect() const
返回包含多边形的最小矩形。
-
qreal area() const
返回多边形的面积。
-
QPointF center() const
返回多边形的中心点。
-
bool containsPoint(const QPointF &point, Qt::FillRule fillRule = Qt::OddEvenFill) const
判断指定的点是否在多边形内部。
-
QPolygon translated(const QPointF &offset) const
返回平移后的多边形。
-
QPolygon intersected(const QPolygon &r) const
返回与给定多边形的交集。
-
QPolygon subtracted(const QPolygon &r) const
返回减去给定多边形后的结果。
六、Static函数介绍
QPolygon类本身并没有提供static函数,但Qt框架中的其他类(如QGlobalStatic)提供了用于创建全局静态对象的static宏和方法。这些static方法可以用于创建和管理QPolygon的全局实例。
七、运算符重载
QPolygon类没有显式地提供运算符重载,但它继承自QVector,因此支持QVector提供的所有运算符重载,包括operator[]
用于访问和修改顶点,以及operator<<
用于向多边形中添加点。
cpp
QPolygon polygon;
polygon << QPoint(10, 20) << QPoint(20, 30);
八、详细代码举例
以下是一个使用QPolygon类的详细代码示例,演示了如何创建一个多边形并在窗口上绘制它:
cpp
#include <QApplication>
#include <QWidget>
#include <QPolygon>
#include <QPainter>
class MyWidget : public QWidget {
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
QPolygon polygon;
polygon.setPoints(QPointF(50, 50), QPointF(150, 50), QPointF(100, 150), QPointF(50, 150));
}
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.setBrush(QColor(255, 0, 0)); // 设置红色填充
painter.drawPolygon(polygon); // 绘制多边形
QWidget::paintEvent(event);
}
private:
QPolygon polygon; // 声明一个QPolygon对象
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget w;
w.show();
return app.exec();
}
在这个示例中,我们创建了一个名为MyWidget
的自定义窗口类,并在其构造函数中创建了一个QPolygon对象,并设置了其顶点。然后,我们重写了paintEvent
方法,使用QPainter
对象在窗口上绘制了多边形。