首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QChart使用QDateTimeAxis时不显示任何系列数据

QChart使用QDateTimeAxis时不显示任何系列数据
EN

Stack Overflow用户
提问于 2018-10-19 14:34:55
回答 1查看 1.2K关注 0票数 1

我想使用QChartQLineSeries显示一个实时图,其中X值是时间戳。当我使用QValueAxis作为X轴时,一切都像预期的那样工作,但是切换到QDateTimeAxis不会导致数据被绘制--只是一个空的图表。

演示问题的示例代码:

代码语言:javascript
复制
QLineSeries *series = new QLineSeries();
series->setUseOpenGL(true); // Disabling OpenGL doesn't change anything.

QChart *chart = new QChart();
chart->addSeries(series);

QValueAxis *axisY = new QValueAxis();
axisY->setTickCount(5);
axisY->setMinorTickCount(1);
axisY->setLabelFormat("%.2f");

QDateTimeAxis *axisX = new QDateTimeAxis(); // Using QValueAxis here instead makes the problem disappear.
axisX->setTitleText("Timestamp");
axisX->setTickCount(5);

chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisX);
series->attachAxis(axisY);  

QChartView *chartView = new QChartView(chart);  
chartView->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::HighQualityAntialiasing);

// Add some sample points.
QDateTime xval;
xval.setDate(QDate(2018, 1, 5));
series->append(xval.toMSecsSinceEpoch(), 3);
xval.setDate(QDate(2018, 1, 6));
series->append(xval.toMSecsSinceEpoch(), 6);
xval.setDate(QDate(2018, 1, 7));
series->append(xval.toMSecsSinceEpoch(), 4);

// Set ranges to display.
chart->axisX()->setRange(series->at(0).x(), series->at(series->count()-1).x()); 
chart->axisY()->setRange(0.0, 10.0);

这将导致一个空图表,其X轴值为默认值(所有滴答值为‘01-01-1970 1:00’),但如果使用QValueAxis而不是QDateTimeAxis,则相同的代码将正确呈现该系列。

我试过的是:

  • chartView->repaint() -无影响;
  • chart->removeSeries()/addSeries()在追加数据后重新添加该系列;这将导致显示该系列,但X轴勾值是错误的:它们都显示默认的'01-01-1970 .‘标签,而不是与数据相对应的标签。即使这是一个可行的解决方案,也不应该需要删除和重新添加该系列。

我用的是Qt 5.9.2。

为什么QDateTimeAxis的行为会有所不同?是否有一种方法可以使这种工作一致,而不管轴类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 11:31:16

解决方案是在为使用fromMSecsSinceEpoch()添加的数据设置轴范围时使用toMSecsSinceEpoch()

代码语言:javascript
复制
axisX->setRange(
  QDateTime::fromMSecsSinceEpoch(series->at(0).x()), 
  QDateTime::fromMSecsSinceEpoch(series->at(series->count()-1).x())); 

然后,该系列将正常显示。

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

https://stackoverflow.com/questions/52894581

复制
相关文章

相似问题

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