c++ - QLineSeries添加数据后如何更新/重绘QChart?

标签 c++ qt qt5 updates qchart

我正在生成一些我想使用 QChart 和 friend 绘制图表的数据。这是我第一次使用 QChart,所以基本上我所做的就是复制 QLineSeries Example并根据我的需要修改它。我当前的代码如下所示:

    quint64 last=0;
    quint64 *lastp=&last;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , series( nullptr )
{
    ui->setupUi(this);
    QChart *chart = new QChart();
    series=new QLineSeries(chart);
    chart->legend()->hide();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->setTitle("Simple line chart example");
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    setCentralWidget(chartView);
    GeneticTask *gTask = new GeneticTask();
    connect(gTask, &GeneticTask::point, this, [=](QPointF pt) {
        // New point added to series
        *series<<pt;
        // Limit updates to once per second
        quint64 now=QDateTime::currentMSecsSinceEpoch();
        if(now-(*lastp)>1000) {
            qDebug()<<"UPDATE";
            // [A] WHAT TO PUT HERE TO HAVE CHART REDRAW WITH NEW DATA?
            *lastp=now;
        }
    }
    );
    QThreadPool::globalInstance()->start(gTask);
}

当我运行这段代码时,我希望我的新数据显示在图表中,但事实并非如此,所以我的问题是:我怎样才能让图表更新以显示新数据? 换句话说,我应该在注释为 [A] 的代码中添加什么?

最佳答案

将值附加到 QLineSeries使用运算符 <<append方法应该重新绘制图表。如果由于某种原因没有发生,您可以尝试调用 repaint QChartView 上的方法.

下面是一些代码,一旦数据被添加到中心位置,上限为每秒最多一次:

// Global or class scope or
qreal max=-10000000000;
qreal min=-max;
qreal *maxp=&max;
qreal *minp=&min;

// Same scope as before
connect(gTask, &GeneticTask::point, this, [=](QPointF pt) {
        if(pt.y()>*maxp) {
            *maxp=pt.y();
        }
        if(pt.y()<*minp) {
            *minp=pt.y();
        }
        *series<<pt;
        quint64 now=QDateTime::currentMSecsSinceEpoch();
        if(now-(*lastp)>1000) {
            qDebug()<<"UPDATE";
            chart->axisX()->setRange(0,series->count());
            chart->axisY()->setRange(*minp,*maxp);

            *lastp=now;
        }
    }
);

关于c++ - QLineSeries添加数据后如何更新/重绘QChart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010572/

相关文章:

c++ - 检查八进制数

c++ - 如何使用 QFileDialog 和 boost 保存多张图片

mp3 - 如何修复 Qt5 中的 gstreamer 错误?

c++ - 如果我的类正确管理资源,那么拥有智能指针有什么意义呢?

传递具有任意数量参数的任意函数的 C++ 函数

c++ - 如何正确进行图像反投影?

c++ - .pro 文件中的 RPATH 不起作用

c++ - 新的 Qt 在没有这个的情况下通过重载发出语法错误信号

c++ - 如何避免与 Windows 头文件中定义的宏发生名称冲突?

c++ - join() 是否释放了分配的内存? - C++11 线程