我有一个自定义QDialog,它包含一个QStackedWidget和QScrollArea小部件,用于堆叠小部件的每个页面。
我想设置QDialog的大小提示,使得对话框足够大,以便在首次显示对话框时滚动区域的滚动条不可见(即确保QScrollArea视口的大小=子项的大小提示滚动区域中的小部件)。目前,QDialog的默认sizeHint()实现高度不足,导致首次加载时显示垂直滚动条。
我认为这可以通过为QDialog重新实现sizeHint()来实现,其中对话框的大小提示将通过QScrollArea视口大小所需的量来调整,以等于子窗口小部件的大小提示。滚动区域(用于堆叠布局的第一页)。不幸的是,在sizeHint()中,QScrollArea视口的大小设置为QStackedWidget(640x480)的默认大小,并且只有在显示QDialog时才更新为正确的大小。
在显示QScrollArea视口之前是否有某种方法可以获得正确大小的QScrollArea视口,或者是另一种方法来实现调整对话框大小提示所需的效果,以防止滚动条在首次显示时显示(除了硬编码对话框大小外。
答案 0 :(得分:1)
对话框的组成为:
我有一个自定义QDialog,包含一个带QScrollArea的QStackedWidget 堆叠小部件的每个页面的小部件。
棘手的部分是回答:
是否有某种方法可以获得QScrollArea视口的正确大小 在它出现之前?
好吧,在切换到某个页面之前,如果正确设置了滚动区域视口,您可以估计滚动区域视口,或者您可以只测量滚动区域内的内容。我通常强制小部件从滚动区域要求某个高度:
wdgetInScrollArea->setMinimumSize( widgetInScrollArea->sizeHint() );
wdgetInScrollArea->adjustSize(); // sometimes it is needed
滚动区域视口提示更加“充足”:
qDebug() << scrollArea->viewPortSizeHint(); // report
我没有看到代码,但通常甚至不需要在这里进行任何自定义事件处理,只需准备所有嵌套的小部件。