[Qgis-developer] mapCanvasItem not able to display

nitin quick quick.nitin at gmail.com
Fri Oct 13 06:14:17 EDT 2006


thanks martin,

step 1 i am dong fine.
step 2 is fishy in my code.
step 3 is what i expect from code but was not working. i Will try to
improve on that.
If things donot happen i will certaily post my code.

regards
quickNitin
> On 10/12/06, Martin Dobias <wonder.sk at gmail.com> wrote:
> > On 10/11/06, nitin quick <quick.nitin at gmail.com> wrote:
> > > I had managed to show points by making drawShape() (if show() do not
> > > help much) a public function in custonItem class . And yes
> > > custom-qgsCanvasItem::drawShape() do not get called on update().
> >
> > You have made drawShape() a public function and call it directly? This
> > is not good since it violates the principles of canvas items. If
> > drawShape() is not called on update(), there must be another problem.
> > If you're using custom canvas item for drawing a point on the map, why
> > not to use directly QgsVertexMarker or use that code and customize it?
> >
> > Basically a custom map canvas item should work like this:
> >
> > 1. creation: constructed with pointer to map canvas
> >   MyItem::MyItem(QgsMapCanvas* canvas)
> >   : QgsMapCanvasItem(canvas) // call constructor of the base class
> >   { /* some construction */ }
> >
> > 2. set position, visibility and update:
> >  - option A: using default updatePosition()
> >     when you want to redraw item:
> >     1. if item's position or shape changed, call setRect(...)
> >     2. to change visibility (hidden by default!): show() or hide() or
> > setVisibility(bool)
> >     3. to update both item and canvas: updateCanvas()
> >  - option B: using custom updatePosition()
> >     override updatePosition() which calls move() and setSize() with
> > appropriate values
> >     when you want to redraw item: the same as with option A, just use
> >     updatePosition() to update position and size instead of setRect()
> >
> > 3. drawing - in drawShape() - this function is called when canvas gets
> > updated, the item is visible and is scheduled for update
> >    use toCanvasCoords convenience function to convert from map coordinates
> >    to canvas coordinates which are used by QPainter
> >
> > > Also Whatever elements i am drawing, i have set rtti() value 1234 but
> > > in mouse press event collision list, it donot appear. Only rtti it
> > > shows id 5, 11111.
> >
> > That could mean that your canvas item is not bound to map canvas if
> > you can't find the item in the list of all items.
> >
> > > Is there any issue in implementation of custom-qgscanvasitem class? as
> > > i see it is pretty straight also i had tried this as dummy it is
> > > working well.
> >
> > Please check whether your code follows the rules I've mentioned above.
> > If you still can't get it to work, try to post your plugin (or at
> > least implementation of your custom canvas item) so I can take a look.
> >
> > Martin
> >
>



More information about the Qgis-developer mailing list