[Qt4-preview-feedback] BUG: QGraphicsLayout::activate() does not work after the first time
Mihail Naydenov
mlists at ymail.com
Tue Feb 17 08:37:06 CET 2009
Im using 4.5-rc1...and am pretty sure I have not messed up the releases.
MihailNaydenov
----- Original Message ----
From: Jan-Arve Sæther <jasaethe at trolltech.com>
To: qt4-preview-feedback at trolltech.com
Sent: Thursday, February 12, 2009 12:35:34 PM
Subject: Re: [Qt4-preview-feedback] BUG: QGraphicsLayout::activate() does not work after the first time
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
Qt4-preview-feedback at trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt4-preview-feedback
More information about the Qt4-feedback
mailing list