带有自定义QFrame的QScrollArea

时间:2017-03-19 22:54:01

标签: c++ qt qwidget qscrollarea qframe

我正在使用Qt 5.8。我有我的自定义QFrame(称为MyQFrame),它由几个其他QWidgets组成,可以(并且将)包含我的自定义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 ...

我无法让滚动区域正常工作。而不是扩展嵌套MyQFrames的父项并添加滚动条是最后一个孩子被其他MyQFrame重叠。看起来我为MyQFrames遗漏了setWidgetResizable之类的内容,但此方法仅在QScrollArea中。我不知道我现在应该尝试什么。我还是很陌生。

从下图中可以更清楚。

overlaping

1 个答案:

答案 0 :(得分:0)

正如我所说,我在MyQFrame中使用QGridLayout。我必须将此布局的大小限制设置为最小大小,如下所示:layout->setSizeConstraint(QLayout::SetMinimumSize);。现在它正在按照我想要的方式工作。