带有自定义QFrame的QScrollArea

我正在使用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重叠 . 看起来我错过了像 setWidgetResizable 这样的MyQFrames,但这个方法只在QScrollArea中 . 我不知道我现在应该尝试什么 . 我还是很陌生 .

从下面的图片中可以更清楚 .

overlaping

回答(1)

2 years ago

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