回答
我們可以用一系列的信號pointAdded更新的範圍內,爲此,我們將創建分別存儲的最大值和最小值,2個變量:
connect(m_series, &QSplineSeries::pointAdded, [=](int index){
qreal y = m_series->at(index).y();
if(y< yMin || y > yMax){
if(y < yMin)
yMin = y;
if(y> yMax)
yMax = y;
axisY()->setRange(yMin-20, yMax+20);
}
});
完整代碼:
chart.h
#ifndef CHART_H
#define CHART_H
#include <QtCharts/QChart>
#include <QtCore/QTimer>
QT_CHARTS_BEGIN_NAMESPACE
class QSplineSeries;
class QValueAxis;
QT_CHARTS_END_NAMESPACE
QT_CHARTS_USE_NAMESPACE
//![1]
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_axis;
qreal m_step;
qreal m_x;
qreal m_y;
//new variables
qreal yMin;
qreal yMax;
};
//![1]
chart.cpp
#include "chart.h"
#include <QtCharts/QAbstractAxis>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QValueAxis>
#include <QtCore/QTime>
#include <QtCore/QDebug>
Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
QChart(QChart::ChartTypeCartesian, parent, wFlags),
m_series(0),
m_axis(new QValueAxis),
m_step(0),
m_x(5),
m_y(1)
{
qsrand((uint) QTime::currentTime().msec());
QObject::connect(&m_timer, SIGNAL(timeout()), this, SLOT(handleTimeout()));
m_timer.setInterval(1000);
m_series = new QSplineSeries(this);
QPen green(Qt::red);
green.setWidth(3);
m_series->setPen(green);
m_series->append(m_x, m_y);
addSeries(m_series);
createDefaultAxes();
setAxisX(m_axis, m_series);
m_axis->setTickCount(5);
yMax = 10;
yMin = -5;
axisX()->setRange(0, 10);
axisY()->setRange(yMin, yMax);
connect(m_series, &QSplineSeries::pointAdded, [=](int index){
qreal y = m_series->at(index).y();
if(y< yMin || y > yMax){
if(y < yMin)
yMin = y;
if(y> yMax)
yMax = y;
axisY()->setRange(yMin-20, yMax+20);
}
});
m_timer.start();
}
Chart::~Chart()
{
}
void Chart::handleTimeout()
{
qreal x = plotArea().width()/m_axis->tickCount();
qreal y = (m_axis->max() - m_axis->min())/m_axis->tickCount();
m_x += y;
//m_y = qrand() % 5 - 2.5;
m_y = 50*(qrand() % 5 - 2.5);
m_series->append(m_x, m_y);
scroll(x, 0);
if (m_x == 100)
m_timer.stop();
}
它的工作,非常感謝你,先生:) –
我試圖添加主窗口(GUI),但不能做,也不工作的定時器信號/插槽太。連接只在main.cpp中運行,爲什麼?我在哪裏錯誤? void MainWindow :: initChart() { Chart * chart = new Chart(); chart-> setTitle(「動態樣條圖」); chart-> legend() - > hide(); chart-> setAnimationOptions(QChart :: AllAnimations); QChartView chartView(chart); chartView.setRenderHint(QPainter :: Antialiasing); QApplication :: connect(chart-> m_timer,&QTimer :: timeout,chart和Chart :: handleTimeout); } –
通過github或類似方式分享您的代碼 – eyllanesc
我已嘗試添加時間軸爲x軸,但我不能。時間總是相同的,所以它不會改變。爲什麼?
m_series->append(QDateTime::currentDateTime().toMSecsSinceEpoch(), m_y);
- 1. 自動設置時間軸範圍highcharts
- 2. 如何在QtCharts中自動重新縮放座標軸?
- 3. 增加軸範圍
- 4. ZedGraphControl軸值範圍
- 5. 高圖表 - 刪除自動縮小x軸的時間範圍
- 6. matplotlib可選自動縮放軸範圍上向左或向右
- 7. F#圖表沒有自動軸範圍設置?
- 8. scatterplot3d - 改變軸範圍
- 9. JFreeChart域/範圍軸定義
- 10. Dygraphs「x軸」介於範圍
- 11. 相同範圍軸XYZ
- 12. Hist3繪圖和軸範圍
- 13. Y軸範圍在XYChart
- 14. MYSQL自動增量範圍
- 15. VBA自動選擇範圍
- 16. 如何在JFreechart中獲取X軸(範圍軸)的靜態範圍
- 17. PyQt4 - 將滑塊的範圍鏈接到繪圖軸的範圍
- 18. Highcharts - 爲yAxis設置最大範圍,但保持軸的動態範圍
- 19. 更改繪圖中的x軸範圍
- 20. 繪製y軸上的兩個範圍
- 21. y軸的範圍與條形圖
- 22. 刪除軸範圍外的值?
- 23. 切換JFreeChart軸範圍的上限
- 24. gnuplot的軸線範圍格式
- 25. 更改Matlab中的軸杆範圍
- 26. 熊貓在x軸範圍內的boxplot
- 27. 轉軸列的值是範圍
- 28. 如何更改軸的域範圍?
- 29. 定義文本值的Spotfire軸範圍
- 30. X,Y軸-JfreeChart的設置範圍
你可以展示你試過 – eyllanesc
我連着一個關於它的圖像。 –
您可以顯示圖形生成的代碼。 – eyllanesc