Ds
4 ноября 2020 г. 15:07

Получить указатель из QML на класс плагина картографии

Map, OSM, QML, plugin

Здравствуйте, у меня есть кастомный плагин для OpenStreetMap который работает в оффлайн режиме с картами, а в QML у меня компонент Map в котором используется этот плагин:

  1. Window {
  2. visible: true
  3. width: 640
  4. height: 480
  5. Map {
  6. id: map
  7. anchors.fill: parent
  8. zoomLevel: 4
  9. center: QtPositioning.coordinate(54,28);
  10. copyrightsVisible: false
  11. plugin: Plugin {
  12. name: "osm_custom";
  13. PluginParameter {
  14. name: "osm_custom.mapping.offline.directory"
  15. value: "/home/deymos/Рабочий стол/build-Tiler-Desktop_Qt_5_14_1_GCC_64bit-Debug/offline_tiles"
  16. }
  17. }
  18. }
  19. }

И вот настало время кроме отображения карты ещё на ней отмечать места и рисовать маршрут, и все вычисления должны происходить на стороне плагина, так вот, мне нужно как то передать координаты из QML в класс плагина, в идеале если есть такая возможность нужно получить указатель на класс плагина и напрямую передать координаты.

P.S. Плагин находится в другой директории и связан с QML приложением только тем, что в компоненте Plugin указывается.

2

Вам это нравится? Поделитесь в социальных сетях!

7
Алексей Внуков
  • 4 ноября 2020 г. 16:38

добрый, а почему не используете сигналы? ну или зарегистрировать класс и на прямую к нему обращаться?

    Ds
    • 4 ноября 2020 г. 17:55


    Потому что вот как всё устроено,плагин отдельно, приложение отдельно, и плагин запускается после запуска приложения, когда дело доходит до компонента Map, и непосредственный доступ к классу, или через сигналы было бы возможно только если бы плагин был частью проекта и запускался одновременно с приложением.

      Алексей Внуков
      • 4 ноября 2020 г. 17:59

      поскольку у вас есть исходники плагина, что вам мешает интегрировать в свой проект и использовать как угодно и без ограничений, а при необходимости добавлять свои ф-ции?

        Ds
        • 5 ноября 2020 г. 2:45

        я пробовал сделать всё в одном приложении но это невозможно, нужно подключать через компонент карт.

          Алексей Внуков
          • 5 ноября 2020 г. 14:07

          может вы просто не так делали? вам нужно скорее всего создать класс обработчик плагина и его подгружать, а уже в обработчике описать всю работу с классами плагина.

          п.с. 3-я строчка яндекса "qml plugin to c++ class" QML Plugin load from C++

            Ds
            • 5 ноября 2020 г. 15:24

            проблема PluginLoader в том, что вот загружен плагин в виджете, вроде бы всё хорошо, можно в него данные прокинуть, но тут запускается qml и загружает ещё один плагин в который нет возможности из qml прокинуть данные, можно было бы в widget передать их и прокинуть оттуда, но в виджете один обьект, а в qml другой, одного и того же плагина, вот в этом проблема, поэтому и нужно как то получить указатель на плагин в рантайме в qml, и оттуда напрямую передавать данные.

              Алексей Внуков
              • 5 ноября 2020 г. 17:17

              во-первых: вы разрабатываете приложение которое одновременно выводит информацию в виджет и в qml (это разные вещи)? у вас где-то путаница в терминах.
              во-вторых: зарегистрируйте плагин как Singleton а класс, в котором описывается работа с плагином, поместить в singeltonProvider, и он не будет копироваться

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь