QT开发中文网

Qt绘制贝塞尔曲线例程

下面是一个使用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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=6007

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?