[Interest] Update widget geometry BEFORE window shown

David M. Cotter dave at kjams.com
Wed May 29 01:02:06 CEST 2024


Sorry if I wasn’t clear, I meant simply “don’t tell me to no longer have the requirement to get the correct/updated rectangles before the window is shown”

Please do FEEL FREE to tell me how to do anything differently, as long as we keep the requirement "get the correct/updated rectangles before the window is shown”

:)

> On May 26, 2024, at 11:58 PM, Axel Spoerl via Interest <interest at qt-project.org> wrote:
> 
> Hi David,
> 
> §1 Please don’t try to tell me to do it differently.
> §2 If you don’ know how to answer it, please don’t chime in, thanks.
> 
> These instructions are a bit limiting, are they not?
> 
> In essence, you want a widget's geometry to be precise and up to date, before it has been shown.
> That is done (under more), if QWidgetPrivate::updateGeometry_helper(true) is called.
> There are three ways to achieve that on a hidden widget:
> setVisible(true), show() => probably not an option
> setMaximumSize()
> setMinimumSize() => under certain circumstances.
> 
> Except for the first code path shown, all others cause the helper to be called with a "false" argument, hence the result is not to your liking.
> I haven't debugged with negative co-ordinates. Maybe it works. However, I would be reluctant to depend on something like that.
> There are hacky ways, like re-implementing geometry calculation in the application, linking to WidgetsPrivate. I guess you have discarded those for good reasons.
> 
> With §1 in sight: Grinding stop.
> 
> Cheers
> Axel
> Von: Interest <interest-bounces at qt-project.org> im Auftrag von coroberti <coroberti at gmail.com>
> Gesendet: Montag, 27. Mai 2024 08:05
> An: David M. Cotter <dave at kjams.com>
> Cc: Qt Project <Interest at qt-project.org>
> Betreff: Re: [Interest] Update widget geometry BEFORE window shown
>  
> Have you tried the suggestion from Henry to move the window first to the negative coordinates?
> 
> Kind regards,
> Robert Iakobashvili
> ............................
> 
> 
> On Mon, May 27, 2024 at 9:01 AM David M. Cotter <dave at kjams.com <mailto:dave at kjams.com>> wrote:
> Does ANY ONE have any ideas on this?? Pretty please??
> 
> -dave
> 
>> On May 24, 2024, at 12:14 PM, David M. Cotter <dave at kjams.com <mailto:dave at kjams.com>> wrote:
>> 
>> I’ve tried everything I can think of. The ONLY one that works the way I NEED is the first one, but that one flashes the window on the screen
>> 
>> #if 1
>> qWidgetP->show();
>> qWidgetP->hide();
>> QtLetTimersFire(0);
>> #endif
>> 
>> #if 0
>> QLayout*
>> layoutP(qWidgetP->layout());
>> 
>> layoutP->update();
>> layoutP->activate();
>> QtLetTimersFire(0);
>> #endif
>> 
>> #if 0
>> for (auto* childP: qWidgetP->findChildren<QWidget*>()) {
>> childP->updateGeometry();
>> }
>> 
>> qWidgetP->updateGeometry();
>> QtLetTimersFire(0);
>> #endif
>> 
>> #if 0
>> qWidgetP->setAttribute(Qt::WA_DontShowOnScreen, true);
>> qWidgetP->show();
>> // qWidgetP->layout()->invalidate();
>> // qWidgetP->layout()->update();
>> // qWidgetP->layout()->activate();
>> qWidgetP->hide();
>> qWidgetP->setAttribute(Qt::WA_DontShowOnScreen, false);
>> QtLetTimersFire(0);
>> #endif
>> 
>> #if 0
>> qWidgetP->setAttribute(Qt::WA_DontShowOnScreen, true);
>> qWidgetP->show();
>> 
>> qWidgetP->layout()->invalidate();
>> qWidgetP->layout()->update();
>> qWidgetP->layout()->activate();
>> 
>> for (auto* childP: qWidgetP->findChildren<QWidget*>()) {
>> childP->updateGeometry();
>> }
>> 
>> qWidgetP->updateGeometry();
>> 
>> qWidgetP->hide();
>> qWidgetP->setAttribute(Qt::WA_DontShowOnScreen, false);
>> QtLetTimersFire(0);
>> #endif
>> 
>> 
>>> On May 24, 2024, at 12:47 AM, coroberti <coroberti at gmail.com <mailto:coroberti at gmail.com>> wrote:
>>> 
>>> David,
>>> Try
>>> yourWidget->layout()->update();
>>> yourWidget->layout()->activate();
>>> 
>>> If not,
>>> let the event loop to run, ie. arranging a short timer.
>>> 
>>> Kind regards,
>>> Robert Iakobashvili
>>> ............................
>>> 
>>> On Fri, May 24, 2024 at 1:53 AM David M. Cotter <dave at kjams.com <mailto:dave at kjams.com>> wrote:
>>>> 
>>>> I need to do something like this:
>>>> 
>>>> windowP->layout()->updateGeometry(); // causes all widget geometry to update
>>>> DoSomethingImportant(windowP->GetWidget(“someWidget”).geometry()); // do something with the geometry of a widget (which must be up to date)
>>>> windowP->setGeometry(windowP->GetInitialGeometry()); // pos/size now based on the fact that we KNOW the geometry of one of the widgets BEFORE the window is shown
>>>> windowP->show(); // only NOW show the window, NOT before now
>>>> 
>>>> How do I do something like the first line? Cause all widget geometry (Recursively), to know / figure out its size AND position? And this BEFORE the window or any widget is “shown”  via the windowP->show() command?
>>>> 
>>>> Please don’t try to tell me to do it differently. If you don’ know how to answer it, please don’t chime in, thanks.
>>>> 
>>>> -Dave
>>>> _______________________________________________
>>>> Interest mailing list
>>>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>>>> https://lists.qt-project.org/listinfo/interest
>> 
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>> https://lists.qt-project.org/listinfo/interest
> 
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org <mailto:Interest at qt-project.org>
> https://lists.qt-project.org/listinfo/interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20240528/ba5ca6e7/attachment.htm>


More information about the Interest mailing list