Qt绘制贝塞尔曲线

转载请标注出处,也算给我加加人气~~~虽然注册很久,就最近刚玩这个,先谢谢了。

同前面的文章,最近又开始接着搞那个画图的小项目。想绘制一个曲线,网上找了一堆,都是不知所云的,要么画定点的曲线、要么就copy一个画贝塞尔曲线的公式然后一堆XXXX的那些。

好像弄Qt搞的很少,网上都找不到这样的……汗~

下面是本人折腾的东西,一些代码片段,或许对以后学习这的人有一些帮助。



void XXXX::mousePressEvent(QMouseEvent *event)
{
if (m_BezierCount == 0)
        {
            graphic = new Bezier;
            newGraphic = true;
//            qDebug()<<"new Bezier:";
         }
        else
        {
            newGraphic = false;
        }
        switch (m_BezierCount)
            {
            case 0:
                graphic->start = graphic->end = graphic->ctrlPoint = graphic->ctrlPoint1 = event->pos();
                ++m_BezierCount;
                break;
            case 1:
                graphic->ctrlPoint = graphic->ctrlPoint1 = event->pos();
                ++m_BezierCount;
                break;
            case 2:
                graphic->ctrlPoint1 = event->pos();
                m_BezierCount = 0;
                break;
            }
}
void XXXXX::mouseMoveEvent(QMouseEvent *event)
{
   if (graphic->shapeType == Graphic::Bezier)
    {
        switch (m_BezierCount)
        {
        case 1:
            graphic->end = event->pos();
            break;
        case 2:
            graphic->ctrlPoint = graphic->ctrlPoint1 = event->pos();
            break;
        case 0:
            graphic->ctrlPoint1 = event->pos();
            break;
        }
}

//这里是painterEvent,本人用的QList保存每次绘制的图形,自定义一个onDraw(QPainter&)
void Bezier::onDraw(QPainter &painter)
{
    painter.setPen(pen);
    painter.setRenderHint(QPainter::Antialiasing,true);

    QPainterPath pathtmp;
    pathtmp.moveTo(start);
//    qDebug()<<"ctrlPoint:"<<ctrlPoint<<",ctrlPoint1:"<<ctrlPoint;
    pathtmp.cubicTo(ctrlPoint, ctrlPoint1, end);
    painter.drawPath(pathtmp);
}


写的比较乱,本人不教学,嘿嘿。不过大体的做法就这样。应该可以看得懂的。



  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值