Have you tried QScrollArea::setWidgetResizable(true)? It will resize the widget in order to avoid scroll bars where they can be avoided, or to take advantage of extra space. I haven't looked into the sources but I believe QScrollArea in "widget resizable" mode honors it's widget's minimum size hint and the scroll bars appear when the size would be less than that.
Bookmarks