BlinCT
Маусым 4, 2021, 1:22 Т.Ж.

Заполнение ChartView с передачей в С++ часть по указателю

Всем привет.
Возникла необходимость передавать данный обьект в С++ и там создавать оси и заполнять данными.
Ниже пример функции

  1. createSerie(QQuickItem *chartview)
  2. {
  3. if(!chartview)
  4. {
  5. return;
  6. }
  7.  
  8. const QMetaObject *mo = chartview->metaObject();
  9.  
  10. if(std::strcmp(mo->className(), "QtCharts::DeclarativeChart") != 0)
  11. return;
  12. int ix = mo->indexOfEnumerator("SeriesType");
  13. QMetaEnum me = mo->enumerator(ix);
  14. int type = me.keyToValue("SeriesTypeLine");
  15.  
  16. QDateTimeAxis *axis_x = new QDateTimeAxis();
  17. QMetaObject::invokeMethod(chartview, "axisX", Qt::DirectConnection, Q_RETURN_ARG(QDateTimeAxis *, axis_x));
  18. axis_x->setFormat("hh:mm");
  19. axis_x->setTitleText("Date");
  20. axis_x->setTickCount(m_vector.size());
  21.  
  22. QValueAxis *axis_y = new QValueAxis();
  23. QMetaObject::invokeMethod(chartview, "axisY", Qt::DirectConnection, Q_RETURN_ARG(QValueAxis *, axis_y));
  24. axis_y->setMin(0);
  25. axis_y->setMax(100);
  26. axis_y->setTitleText("Rainfall [mm]");
  27.  
  28. QAbstractSeries *serie = nullptr;
  29. QMetaObject::invokeMethod(chartview, "createSeries", Qt::DirectConnection,
  30. Q_RETURN_ARG(QAbstractSeries *, serie),
  31. Q_ARG(int, type),
  32. Q_ARG(QString, "serie from c++"),
  33. Q_ARG(QAbstractAxis *, axis_x),
  34. Q_ARG(QAbstractAxis *, axis_y));
  35.  
  36. if (auto *line_serie = qobject_cast<QLineSeries *>(serie))
  37. {
  38. for (const auto &item : m_vector)
  39. {
  40. line_serie->append(item->dataTime.time().hour(), item->temp);
  41. }
  42. }

Проблема в том что QLineSeries должна состоять из времени по оси Х и значения int по оси Y.
Данные хранятся в векторе в таком вот виде

  1. struct TemperatureHistory
  2. {
  3. int index;
  4. QDateTime dataTime;
  5. int temp;
  6. };

На оси Х я хотел отображать hh:mm. Может кто подсказать как правильно такие данные заполнять?

На данный момент получается только вот такое

1

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

0

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз