Hi John, besides the TGLayoutHints the widgets added to a composite frame must also be deleted by the user. I've updated the comments in TGCompositeFrame::AddFrame() accordingly. If you update your code most of your leaks should disappear. Cheers, Fons. On Fri, 2002-06-07 at 23:36, J.D. Frankland wrote: > Hello RootPeople, > > First: sorry, this is a bit long... > > I have succeeded in getting a GUI of the ground by learning from the > example guitest.cxx > However, one of the things which remains unclear to me is to know > exactly which TG**** > objects I need to delete when any of my frames is closed/deleted etc.... > > It is explicitly written in the source code that TGLayoutHints need to > be deleted by the user, > this I do as in the example by putting their pointers in a TList which I > delete in the dtor. > I thought I understood that any TGCompositeFrame-derived object (which > includes, I think, > MainFrames, Tabs, HorizontalFrames, VerticalFrames etc.) keeps a track > of all the frames/widgets which are added to it using AddFrame(...) and > then deletes them all at the end, > so all of these I should not have to worry about. However, what about > e.g. TGNumberEntry widgets ? (I have rather a lot of them). In the > example it is not clear, as it seems that one or two > TGTextButtons/TGTextEntry widgets are added to the fCleanup TList for > user-deletion in the dtor, whereas most of the others are left to the > mother-frame. > > The reason I ask is: my GUI is dynamically created to represent and > configure the structure of a multidetector array, with a set of tabs > describing different layers, each of these tabs has a set of tabs > describing the rings in each layer, and on each of these "ring tabs" are > a set of buttons and TGNumberEntry fields for setting e.g. the number > and angular ranges of the telescopes in the rings. Every time the > detector structure is altered by the user (i.e. changing the number of > telescopes, changing the angles covered by the rings, removing/adding a > ring...) the GUI must be updated in order to reflect these changes. The > only way I can see of doing this is to wipe (i.e. delete) everything > except the MainFrame and reconstruct the whole lot whenever the user > presses the "Update Array Structure" button. But although I carefully > delete all my TGLayoutHints I seem to have memory leaks, because > repeated pushing of the "Update" button gives increasing memory > occupation by my application, increasingly slow response of the GUI > redrawing, and eventually segmentation faults (although it doesn't > actually crash, the buttons just stop working, or the interface goes > weird...) > > Can anyone help ? Is there an easier way to do this ? Can one for > example link the TGNumberEntry fields to the data member they are > representing so that they are always automatically up to date without > intervention from me ? (although this would not be sufficient for > example in the case where I need to add a new button for a new > telescope, or remove a ring tab etc. etc. ....) > > Thankyou for reading all this > John Frankland -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:56 MET