初墨墨 2023-06-13 18:42 采纳率: 11.1%
浏览 28

关于Qt中QChart画图的问题

最写一个小的测试用例,通过串口收到的数据进行绘制曲线图,要求是在一个QChart上画一条线,然后要四个QChart上分别画四条线,我现在搞出来一个运行都会只显示最下面的那个图,上面的图就不显示是为什么呢?
我之前认为是x y轴以及QChart画笔的问题,但是我新增了 还是显示不出来全部的图,就很迷忙,求各位解答俺。
代码只放了部分,我觉得其他的代码跟这个问题没啥联系。
x.h文件

    QChart *chart,*chart1,*chart2,*chart3;                  //图表组件,可理解为画笔,用它画曲线
    QSplineSeries *series,*series1,*series2,*series3;          //曲线指针 实例 series为光滑曲线
    QDateTimeAxis *axisX,*axisX1,*axisX2,*axisX3;           //x坐标轴 时间轴
    QValueAxis *axisY,*axisY1,*axisY2,*axisY3;              //y坐标轴

x.cpp文件

void x::Init_chart()
{
    chartView = new QChartView(this);
    chartView->resize(1291,583);
    chartView->setRenderHint(QPainter::Antialiasing);   //设置抗锯齿
    //PWM曲线
    chart = new QChart();
    chart->legend()->setVisible(false);
    chartView->setChart(chart);                         //把chart显示到窗口上
    QVBoxLayout *PWMLayout = new QVBoxLayout();
    PWMLayout->addWidget(chartView);
    ui->PWM->setLayout(PWMLayout);
    series = new QSplineSeries;
    series->setName("PWM");
    chart->addSeries(series);
    //坐标
    axisX = new QDateTimeAxis();
    axisX->setGridLineVisible(true);        //网格可见
    axisX->setTickCount(5);                 //设置坐标轴格数
    axisX->setFormat("hh:mm:ss");           //设置时间显示格式
    axisX->setTitleText("t/s");
    axisY = new QValueAxis();
    axisY->setTickCount(5);
    axisY->setRange(0,100);                 //设置Y轴范围
    axisY->setGridLineVisible(true);        //设置Y轴网格显示
    //axisY->setTickCount(2);               //轴上有多少个标记数目
    //axisY->setMinorTickCount(5);          //主要刻度之间有多少网格线
    axisY->setTitleText("PWM");
    axisY->setLabelFormat("%d");            //图例的格式  %d为十进制显示
    chart->addAxis(axisX,Qt::AlignBottom);  //设置坐标轴位于chart中的位置
    chart->addAxis(axisY,Qt::AlignLeft);
    series->attachAxis(axisX);              //把数据添加到坐标轴上
    series->attachAxis(axisY);

    //angle曲线
    chart1 = new QChart();
    chart1->legend()->setVisible(false);
    chartView->setChart(chart1);
    QVBoxLayout *angleLayout = new QVBoxLayout();
    angleLayout->addWidget(chartView);
    ui->angle->setLayout(angleLayout);
    series1 = new QSplineSeries;
    series1->setName("angle");
    chart1->addSeries(series1);
    //坐标
    axisX1 = new QDateTimeAxis();
    axisX1->setGridLineVisible(true);//网格可见
    axisX1->setTickCount(5);        //设置坐标轴格数
    axisX1->setFormat("hh:mm:ss");        //设置时间显示格式
    axisX1->setTitleText("t/s");
    axisY1 = new QValueAxis();
    axisY1->setTickCount(5);
    axisY1->setRange(0,100);                    //设置Y轴范围
    axisY1->setGridLineVisible(true);  //设置Y轴网格显示
    axisY1->setTitleText("角度");
    axisY1->setLabelFormat("%d"); //图例的格式  %d为十进制显示
    chart1->addAxis(axisX1,Qt::AlignBottom);               //设置坐标轴位于chart中的位置
    chart1->addAxis(axisY1,Qt::AlignLeft);
    series1->attachAxis(axisX1);                           //把数据添加到坐标轴上
    series1->attachAxis(axisY1);

    //speed曲线
    chart2 = new QChart();
    chart2->legend()->setVisible(false);
    chartView->setChart(chart2);
    QVBoxLayout *speedLayout = new QVBoxLayout();
    speedLayout->addWidget(chartView);
    ui->speed->setLayout(speedLayout);
    series2 = new QSplineSeries;
    series2->setName("speed");
    chart2->addSeries(series2);
    //坐标
    axisX2 = new QDateTimeAxis();
    axisX2->setGridLineVisible(true);//网格可见
    axisX2->setTickCount(5);        //设置坐标轴格数
    axisX2->setFormat("hh:mm:ss");        //设置时间显示格式
    axisX2->setTitleText("t/s");
    axisY2 = new QValueAxis();
    axisY2->setTickCount(5);
    axisY2->setRange(0,100);                    //设置Y轴范围
    axisY2->setGridLineVisible(true);  //设置Y轴网格显示
    axisY2->setTitleText("速度");
    axisY2->setLabelFormat("%d"); //图例的格式  %d为十进制显示
    chart2->addAxis(axisX2,Qt::AlignBottom);               //设置坐标轴位于chart中的位置
    chart2->addAxis(axisY2,Qt::AlignLeft);
    series2->attachAxis(axisX2);                           //把数据添加到坐标轴上
    series2->attachAxis(axisY2);

    //accspeed曲线
    chart3 = new QChart();
    chart3->legend()->setVisible(false);
    chartView->setChart(chart3);
    QVBoxLayout *accspeedLayout = new QVBoxLayout();
    accspeedLayout->addWidget(chartView);
    ui->accspeed->setLayout(accspeedLayout);
    series3 = new QSplineSeries;
    series3->setName("accspeed");
    chart3->addSeries(series3);
    //坐标
    axisX3 = new QDateTimeAxis();
    axisX3->setGridLineVisible(true);//网格可见
    axisX3->setTickCount(5);        //设置坐标轴格数
    axisX3->setFormat("hh:mm:ss");        //设置时间显示格式
    axisX3->setTitleText("t/s");
    axisY3 = new QValueAxis();
    axisY3->setTickCount(5);
    axisY3->setRange(0,100);                    //设置Y轴范围
    axisY3->setGridLineVisible(true);  //设置Y轴网格显示
    axisY3->setTitleText("加速度");
    axisY3->setLabelFormat("%d"); //图例的格式  %d为十进制显示
    chart3->addAxis(axisX3,Qt::AlignBottom);               //设置坐标轴位于chart中的位置
    chart3->addAxis(axisY3,Qt::AlignLeft);
    series3->attachAxis(axisX3);                           //把数据添加到坐标轴上
    series3->attachAxis(axisY3);
}

以上是绘图初始化的部分,把最后的accspeed部分的代码注释掉就只显示speed的绘图,前面两个不显示,

img

我就很迷这是为啥,求各位指点一二 抱拳了

  • 写回答

2条回答 默认 最新

  • Loup&卡普 2023-06-13 19:24
    关注

    ChartView 只能显示一个 chart,你可以创建多个 chartview

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月13日

悬赏问题

  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了