Hi Mihail,
Which preview version is this?
We should have fixed these problems for 4.5 now.
The fixes should at least be in the latest release candidate.

Jan-Arve

Mihail Naydenov wrote:
> It seams there are problems with QGraphicsLayout::activate()
> 
> Calling it (manually) simply does not work - setGeometry() is not called, as 
> the docs say.
> After some debugging it became clear that when activate() is called, first 
> its sets isActivated()
> to true, and thats fine:
> 
> bool QGraphicsLayout::isActivated () const
> Returns true if the layout is currently being activated; otherwise, returns 
> false.
> If the layout is being activated, this means that it is currently in the 
> process of rearranging its items
> (i.e., the activate() function has been called, and has not yet returned)
> 
> 
> ....the problem is - isActivated is never set back to false!
> Simple qDebug() for isActivated() from anywhere in the client code proofs 
> that easily.
> 
> Looking into the code,
> the last command in activate() is:
> 
> // ### bug, should be parentItem ?
> parentLayoutItem()->updateGeometry(); // bubble up; will set activated to 
> false
> 
> that's ok, but no implementation of updateGeometry() exist, that will set 
> activated back to false!
> 
> Looking deeply into the code,
> the possible parents of the layout in question are:
> 
> QGraphicsLayoutItem - it only clears the sizehint cache
> 
> QGraphicsLayout - calls the above QGraphicsLayoutItem implementation and 
> updateGeometry() for all of its parent layouts.
> If the parent is not a layout it calls invalidate() on itself... I don't 
> pretend to know all the code at 100%, and maybe this invalidate is
> 
> meant to do the trick.... But this scenario is highly unlikely - it means the 
> layout that calls activate() in the first place, has to have a parent layout 
> (be part of another layout), which also has a parent that is not a layout !?! 
> ...Hope I got this right...
> 
> 
> QGraphicsWidget - the most common scenario. It also calls the 
> QGraphicsLayoutItem implementation and updateGeometry()
> for all of its parent layouts. If the parent is a widget, it posts 
> LayoutRequest to it, and that it resize itself.
> 
> 
> Im by no means Qt expert, so I might be missing something, but this seams to 
> be the picture...
> 
> Anyways, the reason Im worried is because without activate() there is no way 
> to call any layout with cached values,
> even the existing Qt ones that do implement caching...
> One can allays use invalidate() instead, which sets activate to false, but 
> also clears any cached layout geometry.
> 
> 
> Thank You
> MihailNaydenov
> 
> 
>       


-- 
Jan- Arve Sæther,
Trolltech ASA
_______________________________________________
Qt4-preview-feedback mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt4-preview-feedback

Reply via email to