[Interest] How to dynamically add a MapItemView to a Map?

Kishore J kitts.mailinglists at gmail.com
Thu Sep 8 06:34:27 CEST 2016


Thanks! I understand how that can be an issue. However, I now removed the
enclosing Component (Which really did not do anything). Still, if i do not
call addMapItem() it does not show on the map.
--
Regards,
Kishore

On Wed, Sep 7, 2016 at 7:45 PM, Paolo Angelelli <paolo.angelelli at qt.io>
wrote:

> I see i forgot to answer one question, about delegates and addMapItem.
>
> The problem in your case is that your delegate is incorrect.
> The delegate of a MapItemView must be a Map Item subclass,
> that means MapCircle MapRectangle MapPolygon etc.
>
> If you have it wrapped into a Component, when this component gets
> addMapItem'd to the map, it will be also skipped.
>
> try removing the Component wrapper, and you'll see it works.
> (and by the way in your example you miss a window, so the example
> doesn't work as is)
>
> best,
> Paolo
>
> On Tue, 6 Sep 2016 22:53:31 +0530
> Kishore J <kitts.mailinglists at gmail.com> wrote:
>
> > Done. https://bugreports.qt.io/browse/QTBUG-55782
> >
> > Given the limitation, I think my immediate alternative is to create a
> > MapItemView like component that is instantiated outside and write
> > code in the map that calls addMapItem and removeMapItem on the map as
> > and when the list is modified. To the drawing board...
> >
> > Is the patch for the bug requiring to call addMapItem for each item
> > in the MapItemView delegate is due for the next release? i.e. 5.8?
> >
> > How about the bug relating to the setting the center of the map? Its
> > easy to work around but I want to know if it's me doing something
> > wrong. --
> > Regards,
> > Kishore
> >
> > On Tue, Sep 6, 2016 at 9:25 PM, Paolo Angelelli
> > <paolo.angelelli at qt.io> wrote:
> >
> > > On Tue, 6 Sep 2016 19:04:34 +0530
> > > Kishore J <kitts.mailinglists at gmail.com> wrote:
> > >
> > > > Hi
> > > >
> > > > I am inching forward with using QML maps in my C++ application.
> > > > Now i'm interested in dynamically adding multiple MapItemView
> > > > objects to a given map.
> > > >
> > > >
> > > > import QtQuick 2.5
> > > > import QtLocation 5.6
> > > >
> > > > Map {
> > > >     id: map
> > > >     objectName: "MyMap"
> > > > //     zoomLevel: (maximumZoomLevel - minimumZoomLevel)/2
> > > >     zoomLevel: minimumZoomLevel
> > > >
> > > >     plugin: Plugin {
> > > >         name: "here"
> > > >         PluginParameter {name: "here.app_id"; value: "xxxxx"}
> > > >         PluginParameter {name: "here.token"; value: "xxxxx"}
> > > >     }
> > > > //     activeMapType: supportedMapTypes[3]
> > > >     center {
> > > >         latitude: 10
> > > >         longitude: 20
> > > >     }
> > > >
> > > >     MapCircle {
> > > >         id: staticCircle
> > > >         center {
> > > >             latitude: 5
> > > >             longitude: 10
> > > >         }
> > > >         radius: 500000.0
> > > >         color: 'yellow'
> > > >         border.width: 4
> > > >         border.color: 'yellow'
> > > >         Component.onCompleted: {
> > > >             console.debug("Loaded static MapCircle")
> > > >             console.debug(center + ' radius: ' + radius)
> > > >         }
> > > >         Component.onDestruction: {
> > > >             console.debug("Unloaded static MapCircle")
> > > >         }
> > > >     }
> > > >
> > > >     MapItemView {
> > > >         id: mapitemview
> > > >         objectName: "MyMapItemView"
> > > >         model: ListModel {
> > > >             id: list
> > > >             ListElement{lat: 10; lon: 20; rad: 800000}
> > > >             ListElement{lat: 30; lon: 40; rad: 700000}
> > > >         }
> > > >         delegate: Component {
> > > >             id: delegate
> > > >
> > > >             MapCircle {
> > > >                 id: dynmapcircle
> > > >                 center {
> > > >                     latitude: lat;
> > > >                     longitude: lon;
> > > >                 }
> > > >                 radius: 500000.0
> > > >                 color: 'black'
> > > >                 border.width: 4
> > > >                 border.color: 'black'
> > > >                 Component.onCompleted: {
> > > >                     console.count("Loaded a MapCircle")
> > > >                     map.addMapItem(dynmapcircle)
> > > >                 }
> > > >             }
> > > >         }
> > > >
> > > >         Component.onCompleted: {
> > > >             console.debug("Loaded first MapItemView")
> > > >             console.debug(model.count)
> > > >         }
> > > >         Component.onDestruction: {
> > > >             console.debug("Unloaded first MapItemView")
> > > >         }
> > > >     }
> > > >
> > > >     MapItemView {
> > > >         id: mapitemview2
> > > >         objectName: "MyMapItemView2"
> > > >         model: ListModel {
> > > >             id: list2
> > > >             ListElement{lat: -10; lon: 20; rad: 800000}
> > > >             ListElement{lat: -30; lon: 40; rad: 700000}
> > > >         }
> > > >         delegate: Component {
> > > >             id: delegate2
> > > >
> > > >             MapCircle {
> > > >                 id: dynmapcircle2
> > > >                 center {
> > > >                     latitude: lat;
> > > >                     longitude: lon;
> > > >                 }
> > > >                 radius: 500000.0
> > > >                 color: 'blue'
> > > >                 border.width: 4
> > > >                 border.color: 'blue'
> > > >                 Component.onCompleted: {
> > > >                     console.count("Loaded a MapCircle2")
> > > >                     map.addMapItem(dynmapcircle2)
> > > >                 }
> > > >             }
> > > >         }
> > > >
> > > >         Component.onCompleted: {
> > > >             console.debug("Loaded second MapItemView")
> > > >         }
> > > >         Component.onDestruction: {
> > > >             console.debug("Unloaded second MapItemView")
> > > >         }
> > > >     }
> > > >
> > > >     Component.onCompleted:{
> > > >         center.latitude = 10
> > > >         center.longitude = 20
> > > >         console.debug('Loaded map ' + map.center)
> > > >     }
> > > >     Component.onDestruction:{
> > > >         console.debug('Unloaded map')
> > > >     }
> > > > }
> > > >
> > > > Further, i do not understand why i have to call the
> > > > map.addMapItem() function for each MapItem. I suspect that, that
> > > > is the source of my problem. I am currently able to define a
> > > > separate qml file containing the second MapItemView which i
> > > > instantiate in C++ and set the map as it's parent but that does
> > > > not work.
> > > >
> > > > Any help would be appreciated.
> > > > --
> > > > Regards,
> > > > Kishore
> > > >
> > > > PS: I also seem to be facing another issue where the center value
> > > > specified in the map initialization does not work and I have to
> > > > set the center in the onCompleted() slot. Funnily, it only
> > > > considers the Latitude or Longitude value in the initialization
> > > > depending on which is first specified!
> > >
> > > Hi, for the first question, the answer is "you can't".
> > > This is a limitation of the current API, and something that might be
> > > worthwile extending.
> > > So feel free to send a feature request to jira.
> > >
> > > For the second question, please have a look if the (now merged)
> > > patch fixes your bug
> > >
> > > best,
> > > Paolo
> > > _______________________________________________
> > > Interest mailing list
> > > Interest at qt-project.org
> > > http://lists.qt-project.org/mailman/listinfo/interest
> > >
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160908/4dd74433/attachment.html>


More information about the Interest mailing list