首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtCharts setRange问题

QtCharts setRange问题
EN

Stack Overflow用户
提问于 2020-06-27 08:28:14
回答 1查看 215关注 0票数 2

我想用QtCharts显示一些数据。当我设置数据时,就不会显示任何内容。我认为问题在于setRange方法。

代码:

图表h:

代码语言:javascript
复制
#ifndef CHART_H
#define CHART_H

#include <QChart>
#include <QTimer>
#include <QAbstractAxis>
#include <QSplineSeries>
#include <QValueAxis>
#include <QDebug>

QT_CHARTS_BEGIN_NAMESPACE
class QSplineSeries;
class QValueAxis;
QT_CHARTS_END_NAMESPACE

QT_CHARTS_USE_NAMESPACE

class Chart: public QChart
{
    Q_OBJECT
public:
    Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
    virtual ~Chart();

public slots:
    void handleTimeout();

private:
    QTimer m_timer;
    QSplineSeries *m_series;
    QStringList m_titles;
    QValueAxis *m_axisX;
    QValueAxis *m_axisY;
    qreal m_step;
    qreal m_x;
    qreal m_y;
    QList<double> testList;
};

#endif /* CHART_H */

chart.cpp:

代码语言:javascript
复制
#include "chart.h"

Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
    QChart(QChart::ChartTypeCartesian, parent, wFlags),
    m_series(0),
    m_step(0),
    m_x(1),
    m_y(1)
{
    m_axisX = new QValueAxis(this);
    m_axisX->setLabelsVisible(false);
    m_axisY = new QValueAxis(this);
    m_axisY->setLabelsVisible(false);
    connect(&m_timer, &QTimer::timeout, this, &Chart::handleTimeout);
    m_timer.setInterval(1000);
    m_series = new QSplineSeries(this);
    QPen green(Qt::green);
    green.setWidth(3);
    m_series->setPen(green);
    m_series->append(m_x, m_y);
    legend()->hide();
    addSeries(m_series);
    setAxisX(m_axisX, m_series);
    setAxisY(m_axisY, m_series);
    m_axisX->setTickCount(5);
    testList << 93.8436 << 777.797 << 2507.78 << 5999.44 << 6806.54 << 7481.16
                 << 8008.5 << 8093.8 << 8161.83 << 8216.99
                 << 8280.46 << 8328.4 << 8394.55 << 8469.84
                 << 8500.65 << 8558.16 << 8660.9 << 8638.87
                 << 8726.47 << 8715.25 << 8804.48 << 8793.86
                 << 8839.42 << 8875.75 << 8938.24 << 8977.09
                 << 9020.27 << 9046.7 << 9092.04 << 9121.58
                 << 9155.36 << 9199.46;
    axisX()->setRange(0, 100);
    axisY()->setRange(-1, 100);
    m_timer.start();
}

void Chart::handleTimeout()
{
    qreal x = plotArea().width() / m_axisX->tickCount();
    qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
    m_x += y;

    if (!testList.isEmpty()) {
        m_y = testList.first();
        testList.takeFirst();
    }

    qDebug() << "m_x: " << m_x << " " << "m_y: " << m_y;
    m_series->append(m_x, m_y);
    scroll(x, 0);
}

Chart::~Chart()
{

}

main.cpp:

代码语言:javascript
复制
#include "chart.h"
#include <QChartView>
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget window;
    Chart *chart = new Chart;
    //chart->setTitle("Dynamic spline chart");
    chart->setAnimationOptions(QChart::AllAnimations);
    QChartView chartView(chart);
    chartView.setRenderHint(QPainter::Antialiasing);
    chartView.resize(window.size());
    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(&chartView);
    window.setLayout(layout);
    window.setMinimumSize(810, 400);
    window.show();
    return a.exec();
}

有什么办法解决吗?谢谢。

更新的

我已经解决了这个问题。现在它工作的很好,但我需要设置轴直背景色。

截图:

有什么想法,如何设置轴线的背景色?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-09 16:35:17

我通过使用来自QtNetworkMonitorGitHub示例解决了这个问题。这个问题已经解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62607618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档