Qt QCustomplot 的使用
Qt QCustomplot 的使用

Qt QCustomplot 的使用

笔记

代码如下:

/*********************************************************************************************************
* 函数名称: SetWave1
* 函数功能: 设置波形 1 显示
* 输入参数: buf:缓冲区首地址
*            size:缓冲区长度
*            x0:横坐标起点
*            x1:横坐标终点
* 输出参数: void
* 返 回 值: void
* 创建日期: 2023年08月12日
* 注    意:
*********************************************************************************************************/
void MainWindow::SetWave1(double* buf, unsigned int size, double x0, double x1)
{
    static char s_iInitFlag = 1;
    unsigned int i;
    double max, min;
    double xAxis, step;

    //初始化
    if(0 != s_iInitFlag)
    {
        s_iInitFlag = 0;
        QBrush qBrush(QColor("white")); ui->mWave1->setBackground(qBrush); //设置背景颜色
        ui->mWave1->legend->setVisible(false);                             //不显示图例
        ui->mWave1->xAxis->setRange(0, 4096);                              //设置横坐标范围
        ui->mWave1->yAxis->setRange(0, 4096);                              //设置纵坐标范围
        ui->mWave1->addGraph();                                            //添加一条曲线
        QPen pen; pen.setColor(QColor("red")); pen.setWidth(1);            //画笔配置
        ui->mWave1->graph(0)->setPen(pen);                                 //设置画笔
        ui->mWave1->replot();                                              //刷新显示
    }

    //清空坐标缓冲区
    QVector<double>().swap(wave1XAxis);
    QVector<double>().swap(wave1YAxis);

    //填充坐标
    xAxis = x0;
    step = size;
    step = (x1 - x0) / step;
    for(i = 0; i < size; i++)
    {
        wave1XAxis.append(xAxis);
        wave1YAxis.append(buf[i]);
        xAxis = xAxis + step;
    }

    //查找最大最小值
    max = buf[0];
    min = buf[0];
    for(i = 0; i < size; i++)
    {
        if(buf[i] > max)
        {
            max = buf[i];
        }
        if(buf[i] < min)
        {
            min = buf[i];
        }
    }

    //设置横坐标范围
    ui->mWave1->xAxis->setRange(x0, x1);

    //设置纵坐标范围
    if(max == min){max = max + 1;min = min - 1;}
    ui->mWave1->yAxis->setRange(min, max);

    //刷新显示
    ui->mWave1->graph(0)->setData(wave1XAxis, wave1YAxis);
    ui->mWave1->replot();
}