QLineSeries и QDateTimeAxis - диаграмма не отображает значения - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь добиться чего-то вроде 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);

Я не понимаю, почему значения не отображаются.

Я не могу понять, что случилось.

1 Ответ

0 голосов
/ 26 сентября 2018

Ваш код содержит следующие ошибки:

  • Вы должны использовать toMSecsSinceEpoch() вместо toSecsSinceEpoch().
  • Сначала необходимо добавить ось к QChartперед присоединением к серии.
  • измените series->append(past.toSecsSinceEpoch(),nowvalue); на series->append(now.toMSecsSinceEpoch(),nowvalue);

  • Я рекомендую установить галочки так, чтобы только целые точки былипоказано, поскольку, например, неподходящее значение будет отображаться на вертикальной оси или установлено как плавающее с определенным количеством десятичных знаков, на следующем изображении я показываю результат с% i:

enter image description here

Как мы видим на предыдущем изображении, 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);

enter image description here

...