@ChrisW67 Thanks ! The resizing works but screen.availableGeometry().size() is giving the incorrect size (much too big). I tried a variety of other ways but can't seem to get the correct available size even when running it after the widget is displayed using a timer as suggested.
@VRonin You're right, that was it... I am quite new to concurrency, so I thank you for your insights. I ended up loading the rows in the thread and adding them in the finished slot instead, which fixed both problems.