下面是一个使用Qt绘制贝塞尔曲线的简单例程:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
class BezierWidget : public QWidget {
public:
BezierWidget(QWidget *parent = nullptr) : QWidget(parent), controlPoints(4) {
setFixedSize(500, 500);
setWindowTitle("Bezier Curve Example");
connect(this, &BezierWidget::updateSignal, this, QOverload<>::of(&BezierWidget::update));
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制控制点
painter.setPen(Qt::blue);
for (const QPointF& point : controlPoints) {
painter.drawEllipse(point, 5, 5);
}
// 绘制贝塞尔曲线
painter.setPen(Qt::red);
if (controlPoints.size() >= 2) {
QPainterPath path;
path.moveTo(controlPoints[0]);
for (int i = 1; i + 2 < controlPoints.size(); i += 3) {
path.cubicTo(controlPoints[i], controlPoints[i+1], controlPoints[i+2]);
}
painter.drawPath(path);
}
}
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton && controlPoints.size() < MAX_POINTS) {
controlPoints.push_back(event->pos());
emit updateSignal();
}
}
private:
static const int MAX_POINTS = 12;
QVector<QPointF> controlPoints;
signals:
void updateSignal();
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
BezierWidget widget;
widget.show();
return app.exec();
}
这个例程创建了一个继承自QWidget的自定义控件BezierWidget
,用于显示并操作贝塞尔曲线。通过鼠标左键点击窗口来添加控制点,最多可以添加12个控制点。当添加了足够的控制点后,程序将根据这些点绘制出贝塞尔曲线。
你可以将以上代码保存为一个.cpp文件,并使用Qt编译器进行编译运行,以查看效果。注意需要在项目中链接QtCore和QtGui模块。
内容由零声教学AI助手提供,问题来源于学员提问