Russian Qt Forum
Ноябрь 01, 2024, 13:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Графический редактор для карты  (Прочитано 4738 раз)
Larry
Гость
« : Апрель 06, 2016, 15:03 »

Добрый день.
Нужен совет. Есть необходимость рисовать на карте (plugin osm) примитивы (MapRectangle, MapPolyline и т.д.). Отображать через ListModel в MapItemView - сделаю свою модель. Но не могу понять, как рисовать объект в MouseArea, т.е. надо на лету создавать этот примитив...в qml знаний не хватает. Подскажите пожалуйста.
« Последнее редактирование: Апрель 20, 2016, 11:44 от Larry » Записан
Larry
Гость
« Ответ #1 : Апрель 07, 2016, 09:48 »

Подскажите, может кто знает...

Создаю динамический объект при клике на карте:

Код:
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
import QtPositioning 5.3
import QtLocation 5.5
//--
Item
{
    id:           viewMap;
    anchors.fill: parent;

    Plugin
    {
        id:   pluginMapOSM;
        name: "osm";
    }

    Map
    {
        id:             map;
        anchors.fill: parent;
        plugin:        pluginMapOSM;
        center:       QtPositioning.coordinate(47.94494, 33.43207);
        zoomLevel:  15;
       
        MouseArea
        {
            anchors.fill: parent;
            hoverEnabled: true;

            onClicked:
            {
                var component = Qt.createComponent("ItemRectangle.qml")
                var item      = null;

                if(component.status == Component.Ready)
                {
                    item = component.createObject(map);
                }
                else
                    console.log(component.errorString());
            }

            onPositionChanged:
            {

            }
        }
    }
}

вот ItemRectangle:

Код:
import QtQuick 2.5
import QtPositioning 5.3
import QtLocation 5.5

MapRectangle
{
    id: mapRect

    topLeft:     QtPositioning.coordinate(47.94494, 33.43207);
    bottomRight: QtPositioning.coordinate(47.95, 33.45);

    opacity:      0.5
    color:        "yellow"
    border.color: "red"
    border.width: 2
}

При клике на карте прямоугольника нет...если же сделать так:

Код:
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
import QtPositioning 5.3
import QtLocation 5.5
//--
Item
{
    id:           viewMap;
    anchors.fill: parent;

    MouseArea
    {
        anchors.fill: parent

        onClicked:
        {
            var component = Qt.createComponent("ItemRectangle.qml");

            if(component.status == Component.Ready)
                var item = component.createObject(viewMap);
        }
    }
}

ItemRectangle:

Код:
import QtQuick 2.5
import QtPositioning 5.3
import QtLocation 5.5

Rectangle
{
    id: rect

    width:  100
    height: 100
    color:  "red"
}

В этом случае при клике появляется красный квадрат. Насколько я понял из документации, то создаваемый объект будет визуальным, если родитель является визуальным...Но почему-то в случае с картой такое не получается.
Записан
Larry
Гость
« Ответ #2 : Апрель 07, 2016, 10:00 »

Код:
map.addMapItem
помогло.
Записан
Larry
Гость
« Ответ #3 : Апрель 08, 2016, 16:04 »

А кто знает, можно ли как-то добавить конструктор в qml без создания класса в qt?

Есть элемент модели такого типа:
Код:
ListElement
{
     type_item:    "rectangle"
     color_item:   "yellow"
     opacity_item: 0.5

     border_item:
     [
             ListElement { color: "red" },
             ListElement { width: 5 }
     ]

     topLeft_item:
     [
             ListElement { lat: 47.94494 },
             ListElement { lng: 33.43207 }
     ]

     bottomRight_item:
     [
             ListElement { lat: 47.95 },
             ListElement { lng: 33.45 }
     ]
}

Мне необходимо создать делегат, чтобы отображать такие элементы, но type_item может быть разный и мне необходимо конструировать объекты соответствующего типа. Подскажите как это сделать, плиз!
Записан
Larry
Гость
« Ответ #4 : Апрель 12, 2016, 10:24 »

Добрый день.
Подскажите можно как-то сгруппировать элементы MapRectangle, MapCircle, MapPolyline и т.д. в одну группу? В QtMobility была группа MapGroup, а как сейчас можно это сделать?
Записан
Larry
Гость
« Ответ #5 : Апрель 20, 2016, 11:44 »

Решил группировку через MapQuickItem.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.265 секунд. Запросов: 20.