在图表中更新 QLineSeries 根本不起作用
Updating QLineSeries in Chart doesnt work at all
我现在脑子都快烧焦了,想不通为什么我的图表根本没有更新。
我在我的应用程序 *.h
-File:
中声明了以下内容
QT_CHARTS_NAMESPACE::QChart* chart;
QT_CHARTS_NAMESPACE::QLineSeries* series;
QT_CHARTS_NAMESPACE::QChartView* chartView;
在我的主窗口 *.cpp
文件的构造函数中,我编写了
this->series= new QT_CHARTS_NAMESPACE::QLineSeries();
this->chart = new QT_CHARTS_NAMESPACE::QChart();
this->chartView = new QT_CHARTS_NAMESPACE::QChartView(chart);
this->chartView->setRenderHint(QPainter::Antialiasing);
.
.
.
this->series->clear();
this->chart->legend()->hide();
this->setPlotAreaBackgroundVisible(true);
this->series->setVisible(true);
this->chart->addSeries(this->series);
this->chart->createDefaultAxes();
现在 series
是空的,我从 Qt 文档中知道每次 append()
发出信号时我的图表都应该更新。
在所有这些实例化之后,我的应用程序完成了它的工作。在来自另一个线程的槽中,一些数据应该附加到系列中:
/*Some other things*/
this->seriesXIncrement++;
QPoint point = QPoint(this->seriesXIncrement,this->parsedReadCommand.toUInt());
this->series->append(point);
qDebug()<<this->series->points().size();
this->chart->createDefaultAxes();
this->chartView->repaint();
我已经使用 qDebug
验证了追加方法。它的大小按预期增长,我创建的点也是有效的,但在我的图表上没有任何反应。我不确定 createDefaultAxes()
是否也是更新轴的方法,但我认为这是一种相对简单和懒惰的方法。
我发现 createDefaultAxes()
导致了这个问题。我像这样插入了 createDefaultAxes()
的 (x,y) 轴:
QT_CHARTS_NAMESPACE::QValueAxis *axisX = new QT_CHARTS_NAMESPACE::QValueAxis;
axisX->setRange(0, this->series->points().length());
axisX->setTickCount(10);
axisX->setLabelFormat("%d");
chartView->chart()->setAxisX(axisX, series);
QT_CHARTS_NAMESPACE::QValueAxis *axisY = new QT_CHARTS_NAMESPACE::QValueAxis;
axisY->setRange(0, 50);
axisY->setTickCount(1);
axisY->setLabelFormat("%d");
chartView->chart()->setAxisY(axisY, series);
这解决了问题。
我现在脑子都快烧焦了,想不通为什么我的图表根本没有更新。
我在我的应用程序 *.h
-File:
QT_CHARTS_NAMESPACE::QChart* chart;
QT_CHARTS_NAMESPACE::QLineSeries* series;
QT_CHARTS_NAMESPACE::QChartView* chartView;
在我的主窗口 *.cpp
文件的构造函数中,我编写了
this->series= new QT_CHARTS_NAMESPACE::QLineSeries();
this->chart = new QT_CHARTS_NAMESPACE::QChart();
this->chartView = new QT_CHARTS_NAMESPACE::QChartView(chart);
this->chartView->setRenderHint(QPainter::Antialiasing);
.
.
.
this->series->clear();
this->chart->legend()->hide();
this->setPlotAreaBackgroundVisible(true);
this->series->setVisible(true);
this->chart->addSeries(this->series);
this->chart->createDefaultAxes();
现在 series
是空的,我从 Qt 文档中知道每次 append()
发出信号时我的图表都应该更新。
在所有这些实例化之后,我的应用程序完成了它的工作。在来自另一个线程的槽中,一些数据应该附加到系列中:
/*Some other things*/
this->seriesXIncrement++;
QPoint point = QPoint(this->seriesXIncrement,this->parsedReadCommand.toUInt());
this->series->append(point);
qDebug()<<this->series->points().size();
this->chart->createDefaultAxes();
this->chartView->repaint();
我已经使用 qDebug
验证了追加方法。它的大小按预期增长,我创建的点也是有效的,但在我的图表上没有任何反应。我不确定 createDefaultAxes()
是否也是更新轴的方法,但我认为这是一种相对简单和懒惰的方法。
我发现 createDefaultAxes()
导致了这个问题。我像这样插入了 createDefaultAxes()
的 (x,y) 轴:
QT_CHARTS_NAMESPACE::QValueAxis *axisX = new QT_CHARTS_NAMESPACE::QValueAxis;
axisX->setRange(0, this->series->points().length());
axisX->setTickCount(10);
axisX->setLabelFormat("%d");
chartView->chart()->setAxisX(axisX, series);
QT_CHARTS_NAMESPACE::QValueAxis *axisY = new QT_CHARTS_NAMESPACE::QValueAxis;
axisY->setRange(0, 50);
axisY->setTickCount(1);
axisY->setLabelFormat("%d");
chartView->chart()->setAxisY(axisY, series);
这解决了问题。