在计算机图形学中,贝塞尔曲线(Bézier curve)是一种通过调整控制点位置和数量来构建复杂曲线形状的数学表示方法。
它由法国工程师皮埃尔·贝塞尔(Pierre Bézier)于20世纪60年代创立,被广泛应用于计算机辅助设计(CAD)、2D 和 3D 绘图、矢量图形编辑等领域。
在 Qt 框架中,可以通过 QPainterPath 类创建和操作贝塞尔曲线。
以下是一个简单的示例,展示了如何在 Qt 程序中绘制一个二次贝塞尔曲线:
#include <QApplication>
#include <QWidget>
#include <QPainter>
class BezierWidget : public QWidget {
public:
BezierWidget(QWidget *parent = nullptr)
: QWidget(parent) {
setFixedSize(400, 400);
}
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 设置起点、终点和控制点
QPointF startPoint(100, 300);
QPointF endPoint(300, 300);
QPointF controlPoint(200, 100);
// 创建 QPainterPath 对象,设定起点
QPainterPath path(startPoint);
// 添加二次贝塞尔曲线,指定控制点和终点
path.quadTo(controlPoint, endPoint);
// 绘制曲线
painter.drawPath(path);
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
BezierWidget bezierWidget;
bezierWidget.show();
return app.exec();
}
在这个示例中,首先创建了一个自定义的 QWidget 子类 BezierWidget,然后重写了 paintEvent() 方法,该方法会在窗口需要绘制时调用。
paintEvent() 方法中创建了 QPainter 对象,并通过 QPainterPath 类定义了二次贝塞尔曲线(使用quadTo() 方法指定控制点和终点)。
最后,使用 QPainter 对象来绘制QPainterPath 上的曲线。