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

Paolo Angelelli paolo.angelelli at qt.io
Thu Sep 8 10:58:05 CEST 2016


It is odd since i tried to correct your code and then it was working
form me.
But feel free to open a bugreport with some sample code that can be
built and run to demonstrate the problem :-)

best,
Paolo

On Thu, 8 Sep 2016 10:04:27 +0530
Kishore J <kitts.mailinglists at gmail.com> wrote:

> 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
> >




More information about the Interest mailing list