[Interest] Interest Digest, Vol 95, Issue 19
roland at logikalsolutions.com
Sat Aug 17 00:15:54 CEST 2019
On 8/14/19 11:15 PM, John Weeks wrote:
> I have a moderately complex window (more than 50 QWidget- and QLayout-derived components). I have decided that it would be nice to have two versions: a vertical layout and a horizontal layout. But it's not just a matter of QVBoxLayout vs QHBoxLayout.
> I have developed a new .ui file with the vertical layout and the appropriate rearrangement of the widgets. All the widgets are the same, with the same names. The QLayout-derived items are different, but my code doesn't need to access them.
> It would be great if I could instantiate one or the other of these layouts at run-time and get back a pointer (or something?) that I could use instead of the usual ui-> pointer. The members that I need to reference all have the same names in the two .ui files. Seems like there should be a C++ template way to do this, but I'm not as clever with that kind of stuff as I might be.
> Has anyone developed a solution to this? Or do I need to make a wrapper class that has an accessor function for each of the widgets? That would be a pain to implement, and a source of bugs in the future when I change the layouts.
> Any ideas greatly appreciated.
Had to do that under 4.8 years ago for a medical device touch screen. We
had everything configured in "bricks" for vitals readings and based on
the current patient "profile" not only did the arrangement of the bricks
change but their sizes.
I'm kind of busy this weekend. Drop me a note off-list if you really
need me to look it up. I may have some of the stuff laying around.
Here's the thumbnail sketch.
You aren't granular enough.
Our bricks were really complex. They had a lot of stuff going on in them
despite their tiny size. By and large they were autonomous. They were in
one big widget contained in a stacked widget. When the big widget became
visible it looked at the current patient profile and last manual
arrangement (yes, the user could manually re-arrange via dragging) then
re-displayed the widgets in the correct order and size. (A user could
have been on a configuration or patient screen which caused the current
patient profile to change.)
In short, you don't have enough functionality in your objects if you are
trying to use ui-> directly in a main window.
IF you are really insisting on your current architecture then create one
big widget which contains a stacked widget and create an instance of one
UI in one frame and the other in another frame and an access function in
the big widget class.
I don't know if any of your widgets are connecting to
devices/database/whatever and I don't know if they do anything
global-ish so I don't know if having two different instances will cause
you a problem.
The shortest of short answers is to make each widget its own UI file and
delete the UI files you currently have. Create each of the UI instances
once and have the main window decide where to place them when it becomes
Roland Hughes, President
More information about the Interest