QLineSeries 和 QDateTimeAxis - 图表不显示值
QLineSeries and QDateTimeAxis - Chart doesn't display values
我正在努力实现类似 https://doc.qt.io/qt-5.9/qtcharts-datetimeaxis-example.html 的目标。
在一个方法中我有这个代码
QDateTime past = QDateTime::currentDateTime().addMonths(-10);
QDateTime now = QDateTime::currentDateTime();
qreal pastvalue = 4;
qreal nowvalue = 4;
axisY = new QValueAxis();
axisX= new QDateTimeAxis();
chart = new QChart();
series = new QLineSeries();
/*Y*/
axisY->setLabelFormat("%i");
axisY->setTitleText("Numero dispositivi");
axisY->setMin(0);
axisY->setMax(5);
/*X*/
axisX->setTickCount(2);
axisX->setMin(past);
axisX->setMax(now);
axisX->setFormat("dd-MM-yyyy h:mm:ss");
/*series/*
series->attachAxis(axisX);
series->attachAxis(axisY);
series->append(past.toSecsSinceEpoch(),pastvalue);
series->append(past.toSecsSinceEpoch(),nowvalue);
/*chart*/
chart->legend()->hide();
chart->setTitle("Dati filtrati durante il periodo temporale");
chart->addAxis(axisY, Qt::AlignLeft);
chart->addAxis(axisX, Qt::AlignBottom);
chart->addSeries(series);
chartView = new QChartView(chart);
ui->verticalLayout->addWidget(chartView);
我不明白为什么不显示值。
我不知道怎么回事。
您的代码存在以下错误:
- 您必须使用
toMSecsSinceEpoch()
而不是 toSecsSinceEpoch()
。
- 您必须先将轴添加到
QChart
,然后再将其附加到系列。
将series->append(past.toSecsSinceEpoch(),nowvalue);
更改为series->append(now.toMSecsSinceEpoch(),nowvalue);
我建议你设置刻度,只显示整点,因为例如,不合适的值将显示在垂直轴上,或者设置为浮动一定数量小数位,在下图中我用 %i:
显示结果
正如我们在上图中看到的那样,4 非常接近 3 而远于 5,而不是等距,因此在我提出的解决方案中,您将使用 %.2f:
QDateTime past = QDateTime::currentDateTime().addMonths(-10);
QDateTime now = QDateTime::currentDateTime();
qreal pastvalue = 4;
qreal nowvalue = 4;
axisY = new QValueAxis();
axisX= new QDateTimeAxis();
chart = new QChart();
series = new QLineSeries();
/*Y*/
axisY->setLabelFormat("%.2f");
axisY->setTitleText("Numero dispositivi");
axisY->setMin(0);
axisY->setMax(5);
/*X*/
axisX->setTickCount(2);
axisX->setMin(past);
axisX->setMax(now);
axisX->setFormat("dd-MM-yyyy h:mm:ss");
/*series*/
series->append(past.toMSecsSinceEpoch(),pastvalue);
series->append(now.toMSecsSinceEpoch(),nowvalue);
/*chart*/
chart->legend()->hide();
chart->setTitle("Dati filtrati durante il periodo temporale");
chart->addAxis(axisY, Qt::AlignLeft);
chart->addAxis(axisX, Qt::AlignBottom);
chart->addSeries(series);
series->attachAxis(axisX);
series->attachAxis(axisY);
chartView = new QChartView(chart);
ui->verticalLayout->addWidget(chartView);
我正在努力实现类似 https://doc.qt.io/qt-5.9/qtcharts-datetimeaxis-example.html 的目标。
在一个方法中我有这个代码
QDateTime past = QDateTime::currentDateTime().addMonths(-10);
QDateTime now = QDateTime::currentDateTime();
qreal pastvalue = 4;
qreal nowvalue = 4;
axisY = new QValueAxis();
axisX= new QDateTimeAxis();
chart = new QChart();
series = new QLineSeries();
/*Y*/
axisY->setLabelFormat("%i");
axisY->setTitleText("Numero dispositivi");
axisY->setMin(0);
axisY->setMax(5);
/*X*/
axisX->setTickCount(2);
axisX->setMin(past);
axisX->setMax(now);
axisX->setFormat("dd-MM-yyyy h:mm:ss");
/*series/*
series->attachAxis(axisX);
series->attachAxis(axisY);
series->append(past.toSecsSinceEpoch(),pastvalue);
series->append(past.toSecsSinceEpoch(),nowvalue);
/*chart*/
chart->legend()->hide();
chart->setTitle("Dati filtrati durante il periodo temporale");
chart->addAxis(axisY, Qt::AlignLeft);
chart->addAxis(axisX, Qt::AlignBottom);
chart->addSeries(series);
chartView = new QChartView(chart);
ui->verticalLayout->addWidget(chartView);
我不明白为什么不显示值。
我不知道怎么回事。
您的代码存在以下错误:
- 您必须使用
toMSecsSinceEpoch()
而不是toSecsSinceEpoch()
。 - 您必须先将轴添加到
QChart
,然后再将其附加到系列。 将
series->append(past.toSecsSinceEpoch(),nowvalue);
更改为series->append(now.toMSecsSinceEpoch(),nowvalue);
我建议你设置刻度,只显示整点,因为例如,不合适的值将显示在垂直轴上,或者设置为浮动一定数量小数位,在下图中我用 %i:
显示结果
正如我们在上图中看到的那样,4 非常接近 3 而远于 5,而不是等距,因此在我提出的解决方案中,您将使用 %.2f:
QDateTime past = QDateTime::currentDateTime().addMonths(-10);
QDateTime now = QDateTime::currentDateTime();
qreal pastvalue = 4;
qreal nowvalue = 4;
axisY = new QValueAxis();
axisX= new QDateTimeAxis();
chart = new QChart();
series = new QLineSeries();
/*Y*/
axisY->setLabelFormat("%.2f");
axisY->setTitleText("Numero dispositivi");
axisY->setMin(0);
axisY->setMax(5);
/*X*/
axisX->setTickCount(2);
axisX->setMin(past);
axisX->setMax(now);
axisX->setFormat("dd-MM-yyyy h:mm:ss");
/*series*/
series->append(past.toMSecsSinceEpoch(),pastvalue);
series->append(now.toMSecsSinceEpoch(),nowvalue);
/*chart*/
chart->legend()->hide();
chart->setTitle("Dati filtrati durante il periodo temporale");
chart->addAxis(axisY, Qt::AlignLeft);
chart->addAxis(axisX, Qt::AlignBottom);
chart->addSeries(series);
series->attachAxis(axisX);
series->attachAxis(axisY);
chartView = new QChartView(chart);
ui->verticalLayout->addWidget(chartView);