[Gambas-user] Modifying a picture assigned to a menu
Benoît Minisini
gambas at ...1...
Sat Nov 28 09:59:57 CET 2009
> > Because the underlying toolkit uses its own "picture" object that is not
> > automatically reassigned to the control automatically. In other words,
> > assume that the Picture property returns a copy of the underlying
> > picture.
>
> I hope this doesn't create extra unneeded picture objects in memory,
> so I can perform code like:
>
> DIM Pic AS Picture
> Pic = MenuCustomColor.Picture
> Pic.Fill(Dialog.Color)
> MenuCustomColor.Picture = Pic
>
> for any number of times without memory penalties.
>
> Please confirm this.
>
> Thank you,
> David
>
Nothing is leaked in the process. At least as far as I am concerned!
My explanations were simplified, so here is more details...
When you do:
MenuCustomColor.Picture = Pic
Here is what happens internally (for gb.qt):
1) The old internal MenuCustomColor.Picture is dereferenced.
2) The Pic Gambas object is assigned to the internal MenuCustomColor.Picture
and referenced.
3) The internal Qt QPixmap associated with MenuCustomColor.Picture is assigned
to the internal Qt QMenu associated with MenuCustomColor with the setIcon()
method. So the QPixmap has to be transformed into a QIcon before.
When you do:
MenuCustomColor.Picture.Fill(MyColor)
It happens:
1) The internal MenuCustomColor.Picture is returned.
2) The picture is filled with MyColor, i.e. the internal Qt QPixmap associated
with the picture object is filled.
And that's all. As there is no link between that QPixmap and the icon
associated with the Menu, you see no change on the screen. You must write
MenuCustomColor.Picture = MenuCustomColor.Picture to repeat the step #3 above.
You have the same problem with Button, PictureBox, TreeView, ListView...
Note: It is actually a bit more complex than that, as a QPixmap is internally
associated with the true X11 Pixmap resource that is stored on the server. But
it is automatically managed by the toolkit, so it is out of my control.
Regards,
--
Benoît Minisini
More information about the User
mailing list