qt中画出漂亮的函数曲线

二次函数在这里插入图片描述在这里插入图片描述

  1. 准备画布,填充画布颜色为白色
//头文件中
private:
    Ui::Widget *ui;
    QImage image;
    QString line;
//实现文件中
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    line="";
    ui->setupUi(this);
    image=QImage(1200,1200,QImage::Format_RGB32);
    QColor backColor=qRgb(255,255,255);
    image.fill(backColor);
}

  1. 准备画家,先画出坐标轴
public:
    explicit Widget(QWidget *parent = nullptr);
    void Paint();
    void Connext();

//实现
void Widget::Paint()
{
    QPainter painter(&image);
    painter.setRenderHint(QPainter::Antialiasing,true);
    int pointx=450,pointy=450;
    int width=800,height=800;
    painter.drawRect(5,5,1200-10,1200-10);
    painter.drawLine(pointx-width/2+50,pointy,pointx+width/2+100,pointy);
    painter.drawLine(pointx,pointy-height/2,pointx,pointy+height/2);
}

  1. 描点,把点存储在队列中

描点时,横坐标根据你所给的表达式给出,比如如果是对数函数,从0.1开始往后给出10个左右横坐标。纵坐标需要根据表达式计算,我们只需要把表达式里面的x换成具体的值,就可以计算出纵坐标。

QList<QPointF>points=creatPoints(line);		//creatPoints()是一个函数,
返回需要的数据点,line就是输入的表达式。

//具体实现还有怎么计算数据点有些复杂,这里略过,若想尝试的话,可以自己自定义一些数据点。

4.根据所给点绘制曲线
这里要用到QPainterPath类,顾名思义,它可以根据你所给的点,一段一段的绘制曲线。

  QList<QPointF>points=creatPoints(line);
      QPainterPath path(points[0]);
      for(int i=0;i<points.size()-1;++i)
      {
          QPointF sp=points[i];
          QPointF ep=points[i+1];
          QPointF c1=QPointF((sp.x()+ep.x())/2,(sp.y()+ep.y())/2);
          QPointF c2=c2;
          path.cubicTo(c1,c2,ep);			//这个函数就是用来绘制曲线的。
          //第一个参数和第二个参数都是控制点(百度贝赛尔曲线)
          //第三个参数endpoint,是这小段曲线的终点
          //起点是按照你的队列顺序的前一个节点
          //这里将c1和c2设置成一样的是因为这小段曲线凹凸性是一样的。

      }
              QPainter painter(&image);
              painter.setRenderHint(QPainter::Antialiasing,true);		//防锯齿
              painter.setPen(QPen(Qt::black,10));
              painter.translate(450,450);
              painter.drawPath(path);

这样大致思路就出来了。

### 回答1: 在Qt中绘制曲线可以使用QPainter类中的drawPath函数来完成。drawPath函数可以根据给定的路径绘制曲线。 绘制曲线之前,首先需要创建一个QPainter对象,并指定绘图设备。然后,使用QPainterPath类创建一个路径对象,并使用其成员函数来定义曲线的形状、顶点和控制点等信息。接下来,在路径对象创建完成后,可以使用QPainter的drawPath函数来将路径绘制来。 知道了绘制曲线的基本步骤后,我们可以通过以下示例代码来更加具体地了解如何在Qt中绘制曲线: ```cpp #include <QPainter> #include <QPainterPath> #include <QWidget> class MyWidget : public QWidget { public: void paintEvent(QPaintEvent *) { QPainter painter(this); // 创建路径对象 QPainterPath path; path.moveTo(50, 50); path.quadTo(100, 100, 150, 50); path.cubicTo(200, 0, 250, 200, 300, 50); // 绘制路径 painter.drawPath(path); } }; ``` 上述代码为自定义的QWidget类中的绘图事件函数paintEvent,在该函数中使用QPainter类绘制曲线。首先创建了一个QPainter对象,并将绘图设备设置为当前窗口。然后,使用QPainterPath的成员函数设置了曲线的形状、顶点和控制点等信息。最后,使用QPainter的drawPath函数将路径绘制来,即可在窗口中看到绘制的曲线。 通过以上方式,我们可以在Qt中使用drawPath函数来绘制曲线。 ### 回答2: 在Qt曲线可以使用QPainter类来实现。QPainter类提供了一系列绘图函数,可以用来绘制不同类型的图形,包括曲线。 绘制曲线的关键函数是QPainter的drawPath函数。该函数可以通过指定一个QPainterPath对象来绘制曲线。QPainterPath对象可以使用QPainterPath的addPath函数添加曲线的路径。 具体的绘制步骤如下: 1. 创建一个QPainter对象。 2. 创建一个QPainterPath对象,用于存储曲线的路径。 3. 使用QPainterPath的moveTo函数指定曲线的起点。 4. 使用QPainterPath的cubicTo函数或quadraticTo函数添加曲线的控制点和结束点,来定义曲线的形状。 5. 调用QPainter的drawPath函数,传入QPainterPath对象,以绘制曲线。 例如,以下是绘制一个二次贝塞尔曲线的示例代码: ```cpp void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); QPainterPath path; path.moveTo(30, 30); path.quadraticTo(80, 150, 200, 30); painter.setRenderHint(QPainter::Antialiasing); painter.drawPath(path); } ``` 这段代码在一个自定义的QWidget子类的paintEvent函数中绘制了一个二次贝塞尔曲线。其中,moveTo函数指定曲线的起点为(30, 30),quadraticTo函数指定了曲线的控制点为(80, 150),结束点为(200, 30)。最后使用drawPath函数曲线绘制在窗口上。 使用QPainter类提供的绘图函数,我们可以根据需要绘制各种曲线形状,实现丰富的图形效果。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值