岩消云散 2023-09-18 21:37 采纳率: 100%
浏览 5
已结题

动态折线图显示不出来

可以帮忙看看吗,我这个代码为什么不能显示实时的折线图吗,当前只能显示图表,不显示折线

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QValueAxis>
#include <QTimer>
#include <QRandomGenerator>
#include <QLineSeries>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public:
    void onTimerTimeout();

private:
    QtCharts::QChartView* chartView;    //显示图表
};
#endif // WIDGET_H


widget.cpp


```c++
#include "widget.h"
#include <QVBoxLayout>
#include <QtCharts/QValueAxis>
#include <QDebug>
#include <QPushButton>
#include <QDateTime>
#include <QDateTimeAxis>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QtCharts::QChart* chart = new QtCharts::QChart();
    chartView = new QtCharts::QChartView(this);
    chartView->setChart(chart);
    chartView->setRenderHint(QPainter::Antialiasing);       //设置抗拒齿

    QtCharts::QLineSeries *series = new QtCharts::QLineSeries;
    series->setName("hello");

    chart->addSeries(series);

    //创建Y坐标
    QtCharts::QValueAxis* axisY = new QtCharts::QValueAxis;
    axisY->setRange(0,100);
    axisY->setTickCount(5);
    chart->setAxisY(axisY);
    //设置启动放置阴影
    chart->setDropShadowEnabled(true);


    //创建X坐标
    QtCharts::QDateTimeAxis *axisX = new QtCharts::QDateTimeAxis;
    //格式
    axisX->setFormat("hh:mm:ss");
    //设置竖条数量
    axisX->setTickCount(5);
    chart->setAxisX(axisX,series);


    //初始化坐标
         //设置最大值坐标值 系统时间当前时间
    chart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-5*30));
         //设置最大值坐标值 系统时间后5*30秒
    chart->axisX()->setMax(QDateTime::currentDateTime().addSecs(5*30));

    QTimer* timer = new QTimer(this );
    timer->setInterval(1000);   //设置间隔
    connect(timer, &QTimer::timeout, this, &Widget::onTimerTimeout);

    chartView->setMinimumSize(1000, 600);        // 设置图表显示大小
    chart->legend()->setVisible(true);          //将图表的图例设置为可见
    chartView->show();
    timer->start();
}

Widget::~Widget()
{

}

void Widget::onTimerTimeout()
{
    //生成随机数
    int valueY = QRandomGenerator::global()->bounded(0,100);

    //qDebug() << "Added data point: (" << valueX << "," << valueY << ")";

    //获取当前时间
    QDateTime currentTime = QDateTime::currentDateTime();

    //获取初始化的qchart
    QtCharts::QChart *qchart =(QtCharts::QChart *)chartView->chart();
    //获取初始化的series;
    QtCharts::QLineSeries *series0 = (QtCharts::QLineSeries *)chartView->chart()->series().at(0);
    series0->append(currentTime.toMSecsSinceEpoch(),valueY);

    qchart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-5*30));
    qchart->axisX()->setMax(QDateTime::currentDateTime().addSecs(5*30));

}

main.cpp


#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}


  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-18 23:04
    关注

    引用 皆我百晓生 小程序回复内容作答:

    你的代码基本上是正确的,但有几个小问题可能导致折线图无法显示。

    首先,在Widget类的构造函数中,你将折线图添加到了图表中,但没有将图表添加到窗口中的布局中。你可以通过创建一个垂直布局,并将图表视图添加到该布局中来解决这个问题。修改构造函数如下:

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        // ...
    
        QVBoxLayout* layout = new QVBoxLayout(this);
        layout->addWidget(chartView);
    
        // ...
    }
    

    其次,你的定时器间隔设置为1秒(1000毫秒)。这意味着每秒将向折线图添加一次数据点。如果你的屏幕刷新率是60Hz,那么每秒只更新60次,可能会导致折线图看起来无法实时显示。你可以尝试将定时器间隔设置为更小的值,例如100毫秒,以提高更新频率:

    timer->setInterval(100);   // 100毫秒
    

    最后,确保你的项目连接了所需的Qt Charts模块。在.pro文件中添加以下行:

    QT += charts
    

    完成这些更改后,重新编译和运行你的代码,应该能够实时显示折线图了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月27日
  • 已采纳回答 9月19日
  • 创建了问题 9月18日

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题