qt<qPainter绘制函数图像>

void MainWindow::initPainter() {
    this->pImg = new QPixmap(imgWidth, imgHeight);
    this->pPainter = new QPainter(pImg);           //plmg指定绘图设备
    pPainter->eraseRect(0, 0, pImg->width(), pImg->height());
    pPainter->setRenderHint(QPainter::Antialiasing);    //抗锯齿
    QPen myPen;                                         //画笔颜色设置
    myPen.setColor(Qt::black);                          //笔颜色设置为黑色
    myPen.setWidth(2);
    pPainter->setPen(myPen);
    //坐标转换
    pPainter->translate(5, pImg->height()/2.0);            //原点转化为纵坐标中点
    QFont font;                                         //字体设置
    font.setPixelSize(10);                              //像素
    font.setBold(true);                              //像素
    pPainter->setFont(font);
}
//==========画坐标轴函数==========
void MainWindow::drawAxis() {
    pPainter->eraseRect(-5, -pImg->height()/2.0, pImg->width(),pImg->height());
    //横坐标 每隔5*scale画一条刻度
    pPainter->drawLine(0, 0, pImg->width()-5, 0);
    for(int i=0, pos=scale*5; pos< pImg->width(); i++,pos=i*scale*5) {
        pPainter->drawLine(pos, -5, pos, 0);
        if(0==i%2) {
            pPainter->drawText(pos-3, 10, QString::number(i*5,10));
        }
    }
    //纵坐标 每隔5*scale画一条刻度
    pPainter->drawLine(0,-pImg->height()/2,0,pImg->height()/2);
    for(int i=1,pos=scale*5;pos<pImg->height()/2;i++,pos=i*scale*5)
        {
           pPainter->drawLine(0,pos,5,pos);
           pPainter->drawLine(0,-pos,5,-pos);
           pPainter->drawText(8,-pos,QString::number(i*5,10));
           pPainter->drawText(8,pos,QString::number(-i*5,10));
        }
}

int MainWindow::drawSigTime(int x[],double y[],int n) {
    QPointF pointF[imgWidth];           //目前最大的像素数
    if(n>imgWidth/scale) return -1;
    for (int i=0;i<n;++i){
           pointF[i].setX(x[i]*scale);
           pointF[i].setY(-y[i]*scale);// 坐标反转并缩放
    }
    QPainterPath path; // 使用的平滑曲线的坐标创建 QPainterPath
    path.moveTo(pointF[0]);
    for (int i = 1; i < n; ++i) path.lineTo(pointF[i]);
    pPainter->drawPath(path);
    return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值