我有一个自定义 QDialog,由 QStackedWidget 和 QScrollArea 小部件组成,用于堆叠小部件的每个页面。
我想为 QDialog 设置大小提示,这样对话框就足够大,以至于当对话框首次显示时,滚动区域的滚动条不可见(即确保 QScrollArea 视口(viewport)的大小 = 子项的大小提示滚动区域中的小部件)。当前,QDialog 的默认 sizeHint() 实现高度不足,这会导致在首次加载时显示垂直滚动条。
我认为这可以通过为 QDialog 重新实现 sizeHint() 来实现,对话框的大小提示将根据 QScrollArea 视口(viewport)大小所需的数量进行调整,以等于滚动区域(用于堆叠布局的第一页)。不幸的是,在 sizeHint() 中,QScrollArea 视口(viewport)的大小被设置为 QStackedWidget 的默认大小 (640x480),并且只有在显示 QDialog 时才会更新为正确的大小。
有没有什么方法可以在显示之前获取QScrollArea视口(viewport)的正确大小,或者另一种方法可以达到调整对话框大小提示的预期效果,以防止在首次显示时显示滚动条(除了对对话框大小进行硬编码)。
最佳答案
对话框的组成为:
I have a custom QDialog comprised of a QStackedWidget with QScrollArea widgets for each page of the stacked widget.
棘手的部分是回答:
Is there some way to get the correct size of the QScrollArea viewport before it is shown?
好吧,在切换到某个页面之前,您可以估计滚动区域视口(viewport)是否设置正确,或者您可以只测量滚动区域内的内容。我通常强制小部件从滚动区域要求一定的高度:
wdgetInScrollArea->setMinimumSize( widgetInScrollArea->sizeHint() );
wdgetInScrollArea->adjustSize(); // sometimes it is needed
滚动区域视口(viewport)提示更“合适”:
qDebug() << scrollArea->viewPortSizeHint(); // report
我没有看到代码,但通常不需要在这里进行任何自定义事件处理,只需像那样准备所有嵌套的小部件即可。
关于c++ - 在显示之前获取 QScrollArea 视口(viewport)的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685494/