带有自定义 QFrame 的 QScrollArea

QScrollArea with custom QFrame

我正在使用 Qt 5.8。我有我的自定义 QFrame(称之为 MyQFrame),它由几个其他 QWidget 组成,并且可以(并且将)包含我的自定义 MyQFrame 的其他实例。我为 MyQFrame 设置了最小尺寸。 MyQFrame 使用 QGridLayout 作为布局。

这个MyQFrame放在QTabWidget的QScrollArea里面。 QScrollArea 设置为可调整大小 (setWidgetResizable(true))。在 MyQFrame 中,我尝试将大小策略设置为扩展 (setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);),但没有效果。

这是(抽象)我创建 QTabWidget 和 QScrollArea 的方式:

QTabWidget* tabWidget = new QTabWidget();
QScrollArea* firstTab = new QScrollArea();
firstTab->setWidgetResizable(true);
tabWidget->addTab(firstTab, "first tab");
MyQFrame* myFrame1 = new MyQFrame();
firstTab->setWidget(myFrame1);
// ... adding other MyQFrames inside this one using methods in MyQFrame ...

我无法使滚动区域正常工作。而不是扩展 parents 嵌套的 MyQFrames 并添加滚动条是最后 child 与其他 MyQFrames 重叠。看起来我为 MyQFrames 缺少类似 setWidgetResizable 的东西,但这种方法只在 QScrollArea 中。我不知道我现在应该尝试什么。我对此还是很陌生。

下图应该更清楚

正如我所说,我在 MyQFrame 中使用 QGridLayout。我必须将此布局的大小限制设置为最小大小,如下所示:layout->setSizeConstraint(QLayout::SetMinimumSize);。现在一切如我所愿。