m
July 14, 2020, 12:52 a.m.

Qt IOs магнитное поле

Qt, iOS, Magnetometer

Всем привет!
Пытаюсь получить данные магнитного поля, используя класс QMagnetometer.
Все получается, если задать параметр returnGeoValues false (как по-умолчанию). При этом выдаются raw-данные, а мне нужны обработанные данные. Если я задаю параметр returnGeoValues равным true, то значения магнитного поля x, y, z выдаются равными 0. При этом reading->calibrationLevel() тоже выдает 0, но при первых двух-трех выводах выводит 1.

Прикладываю код своего класса по работе с магнитными полями.
Подскажите, пожалуйста, что не так делаю?
Разрабатываю под IOs, версия Qt 5.15.
Спасибо!

  1. #ifndef MAGNETO_H
  2. #define MAGNETO_H
  3.  
  4. #include <QObject>
  5.  
  6. #include <QMagnetometer>
  7. #include <QMagnetometerFilter>
  8. #include <QMagnetometerReading>
  9. #include "math.h"
  10.  
  11. #include <QDebug>
  12.  
  13. class Magneto : public QObject, public QMagnetometerFilter
  14. {
  15. Q_OBJECT
  16. public:
  17. explicit Magneto(QObject *parent = nullptr);
  18. ~Magneto();
  19.  
  20. bool filter(QMagnetometerReading *reading);
  21.  
  22. void start();
  23. void stop();
  24. bool isMagnetoStarted();
  25.  
  26. private slots:
  27. void onSensorError(const int &errorCode);
  28.  
  29. signals:
  30. void dataReceived(const qreal &x,
  31. const qreal &y,
  32. const qreal &z);
  33.  
  34. private:
  35. QMagnetometer *m_magnetometer;
  36. qreal m_x;
  37. qreal m_y;
  38. qreal m_z;
  39. bool m_isStarted;
  40. };
  41.  
  42. #endif // MAGNETO_H
  1. #include "magneto.h"
  2.  
  3. Magneto::Magneto(QObject *parent) : QObject(parent)
  4. {
  5. m_magnetometer = new QMagnetometer(this);
  6. m_magnetometer->addFilter(this);
  7. m_magnetometer->setReturnGeoValues(true);
  8.  
  9. connect(m_magnetometer, SIGNAL(sensorError(int)),
  10. this, SLOT(onSensorError(int)));
  11.  
  12. m_isStarted = false;
  13. }
  14.  
  15. Magneto::~Magneto()
  16. {
  17. m_magnetometer->deleteLater();
  18. }
  19.  
  20. bool Magneto::filter(QMagnetometerReading *reading)
  21. {
  22. qDebug() << reading->calibrationLevel() << reading->x() << reading->y() << reading->z();
  23.  
  24. emit dataReceived(reading->x() * pow(10, 6),
  25. reading->y() * pow(10, 6),
  26. reading->z() * pow(10, 6));
  27. }
  28.  
  29. void Magneto::onSensorError(const int &errorCode)
  30. {
  31. qDebug() << errorCode;
  32. }
  33.  
  34. void Magneto::start()
  35. {
  36. m_isStarted = true;
  37. m_magnetometer->start();
  38. }
  39.  
  40. void Magneto::stop()
  41. {
  42. m_isStarted = false;
  43. m_magnetometer->stop();
  44. }
  45.  
  46. bool Magneto::isMagnetoStarted()
  47. {
  48. return m_isStarted;
  49. }
2

Do you like it? Share on social networks!

1
m
  • July 18, 2020, 12:14 a.m.
  • The answer was marked as a solution.

Проблему удалось решить путем переписания этой части на Objective C и интегрируя ее в Qt.

    Comments

    Only authorized users can post comments.
    Please, Log in or Sign up
    • Last comments
    • AK
      April 1, 2025, 11:41 a.m.
      Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
    • Evgenii Legotckoi
      March 9, 2025, 9:02 p.m.
      К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
    • VP
      March 9, 2025, 4:14 p.m.
      Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
    • ИМ
      Nov. 22, 2024, 9:51 p.m.
      Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    • Evgenii Legotckoi
      Oct. 31, 2024, 11:37 p.m.
      Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup