[英]QTCharts, how do I make the chart follow the x-axis as live data comes in?
我正在嘗試制作一個實時讀取數據的圖表。 我從 Qt 提供的名為“動態樣條”的示例開始。
我遇到的問題是,scroll() 函數似乎滾動像素,並且在 Qt 中似乎沒有任何函數可以與數據一起滾動。 因此,除非我的像素滾動計數完全正確,否則我的繪圖線會增長直到末端不再可見,或者圖表會通過將繪圖線留在后面而繼續滾動。
對我來說,這就像每個人都會在動態圖表中使用的一個相當明顯的功能,所以我留下了一個問題:我缺少 Qt 圖表中的什么功能來做到這一點?
我所有的搜索都是徒勞的,我什至找不到關於如何在 Qt 圖表中使用動態數據收集的教程。
#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(10),
m_y(1)
{
qsrand((uint) QTime::currentTime().msec());
QObject::connect(&m_timer, SIGNAL(timeout()), this, SLOT(drawChart()));
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(11);
axisX()->setRange(0, 100);
axisY()->setRange(-5, 10);
m_timer.start();
elapsedTime.start();
}
Chart::~Chart()
{
}
void Chart::drawLine(qreal &x, qreal &y)
{
m_series->append(x, y);
}
qreal Chart::getTime()
{
return elapsedTime.elapsed() / 100;
}
void Chart::drawChart()
{
qreal x = plotArea().width() / m_axis->tickCount();
qreal y = (m_axis->max() - m_axis->min()) / m_axis->tickCount();
m_x = getTime();
m_y = qrand() % 5 - 2.5;
drawLine(m_x, m_y);
scroll(x, 0);
qDebug() << getTime();
}
代碼非常簡單,現在它正在繪制,但是線條和滾動條完全沒有下沉。 而且因為我想使用時間作為我的 X 軸,並且不能使用示例設置時使用的良好的不可縮放方式。
現在它只是在繪制一個隨機數。 在我對這個滾動的東西進行排序之前,我不會費心向它提供實際數據。
先謝謝您的幫助。 如果您知道一些關於 Qt 圖表的好教程,我將不勝感激。 Qt 教程,無論如何都是好的,非常難找。
經過一番努力,把東西扔到牆上看看卡住了什么,我發現卷軸不是你應該使用的。 您希望將范圍與您的 x 值聯系起來,並在每次添加數據時更新它。 這確實會強制圖形與數據行一起滾動。
新問題,Qt 中的圖表有一個內置的內存泄漏。
不要滾動,而是嘗試更改 axisX 的最大值。
當你做你的 DrawLine 檢查下一個點是否高於最大值,如果是,則設置一個新的最大值:
if (m_x > m_axisX->max())
{
m_axisX->setMax(m_x);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.