[Interest] Update widget geometry BEFORE window shown

David M. Cotter dave at kjams.com
Fri May 24 21:14:07 CEST 2024


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> 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> 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
>> https://lists.qt-project.org/listinfo/interest

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


More information about the Interest mailing list