2016-02-28 54 views
1

我有一个QStackedWidget和QScrollArea小部件组成的定制QDialog,用于堆叠小部件的每个页面。在显示之前获取QScrollArea视口的大小

我想设置QDialog的大小提示,使对话框足够大,当对话框第一次显示时滚动区的滚动条不可见(即确保QScrollArea viewport的大小= size提示为滚动区域中的子部件)。目前,QDialog的默认sizeHint()实现的高度不足,这会导致在第一次加载时显示垂直滚动条。

我认为这可以通过重新实现QDialog的sizeHint()来实现,其中对话框的大小提示将通过调整QScrollArea视口的大小以等于子窗口小部件的大小滚动区域(用于堆叠布局的第一页)。不幸的是,在sizeHint()中,QScrollArea视口的大小被设置为QStackedWidget(640x480)的默认大小,并且只有在显示QDialog后才会更新为正确的大小。

是否有某种方式可以在显示QScrollArea视口之前获取正确的QScrollArea视口大小,或者通过另一种方式实现调整对话框的大小提示以防止第一次显示时显示滚动条的所需效果(除了硬编码对话框的大小)。

回答

0

与您对话的组成为:

我有一个自定义QDialog的由具有QScrollArea 小部件堆叠的窗口小部件的每一页QStackedWidget的。

棘手的部分是要回答:

有一些办法让QScrollArea视 的正确尺寸显示之前呢?

那么,在切换到某个页面之前,您可以估算滚动区域视口,如果它被正确设置,或者您可以测量滚动区域内的内容。我通常迫使小部件从滚动区域一样,需要一定的高度:

wdgetInScrollArea->setMinimumSize(widgetInScrollArea->sizeHint()); 
wdgetInScrollArea->adjustSize(); // sometimes it is needed 

的滚动区域视提示是那么更多的“足够”:

qDebug() << scrollArea->viewPortSizeHint(); // report 

我没有看到代码但通常甚至不需要在此处执行任何自定义事件处理,只需准备所有嵌套的小部件即可。

+0

谢谢AlexcanderVX。我最终重新实现了我的QDialog类中的showEvent,以获得滚动区视口的正确大小。然后,我将scrollAreaViewport的大小和widgetInScrollArea最小大小提示之间的差异,在对话框显示之前调整对话框的大小(以便在滚动区域中为窗口小部件提供viewport = min size提示的大小)。 –

+0

@karl_simmons,当然这个建议是由你应用的,需要更多的工作。但是,如果答案是有用的,你可能会upvote和接受它,其余的人认为它是有帮助的。我也会尝试从你的解决方案中添加到答案。 – AlexanderVX

相关问题