c++ - 在显示之前获取 QScrollArea 视口(viewport)的大小

标签 c++ qt

我有一个自定义 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/

相关文章:

c++ - C 枚举引用未定义,但位于包含的头文件中?

c++ - 难以理解 C++ 指针语法

c++ - 如何创建优化的图形多色记录器?

Qt 5 与 SQLite : bindValue() results in "Parameter count mismatch" error

c++ - Qt 中的自动排他工具按钮

c++ - 常量数组和常量指针的重载函数

c++ - MS 链接从 gnu make 失败,但从 cmd 行工作

c++ - Qt的QRadioButton如何设置上下标

c++ - 在 QTCreator 中使用 MinGW 编译 c++ 和 cuda 代码

javascript - 在 QML a la Pd 或 Max 中动态连接图形的节点(又名 "patching"接口(interface))