![](https://i-blog.csdnimg.cn/direct/5a1bb4465f5a45299b098946cb431acc.png)
#include <QtWidgets>
class SpiralWidget : public QWidget
{
public:
SpiralWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.translate(width() / 2, height() / 2); // 将原点移动到窗口中心
// 绘制螺旋线
painter.setPen(Qt::black);
const int numPoints = 1000;
const qreal step = 0.1;
qreal angle = 0;
qreal radius = 0;
QPoint prevPoint;
for (int i = 0; i < numPoints; ++i) {
angle += step;
radius += 1 * step; // 控制螺旋线的密度和扩展
int x = radius * cos(angle);
int y = radius * sin(angle);
QPoint point(x, y);
if (i > 0) {
painter.drawLine(prevPoint, point);
}
prevPoint = point;
}
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
SpiralWidget widget;
widget.resize(400, 400);
widget.show();
return app.exec();
}
#include <QtWidgets>
class SquareSpiralWidget : public QWidget
{
public:
SquareSpiralWidget(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.translate(width() / 2, height() / 2); // 将原点移动到窗口中心
// 绘制方形螺旋形
painter.setPen(Qt::black);
const int numSteps = 100; // 螺旋的步数
const qreal stepSize = 10; // 每步的大小
qreal x = 0, y = 0; // 起始点
qreal length = stepSize; // 每次扩展的长度
QPointF prevPoint(x, y);
// 绘制方形螺旋形
for (int i = 0; i < numSteps; ++i) {
// 向右移动
x += length;
QPointF point(x, y);
painter.drawLine(prevPoint, point);
prevPoint = point;
// 向上移动
y += length;
point = QPointF(x, y);
painter.drawLine(prevPoint, point);
prevPoint = point;
// 增加步长
length += stepSize;
// 向左移动
x -= length;
point = QPointF(x, y);
painter.drawLine(prevPoint, point);
prevPoint = point;
// 向下移动
y -= length;
point = QPointF(x, y);
painter.drawLine(prevPoint, point);
prevPoint = point;
// 增加步长
length += stepSize;
}
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
SquareSpiralWidget widget;
widget.resize(400, 400);
widget.show();
return app.exec();
}
![](https://i-blog.csdnimg.cn/direct/3b0a15247e39491097a1613a595e9c46.png)