我正在开发一个具有复杂的小部件和布局层次结构的应用程序,但简而言之,它有一个中央小部件,其中公式集作为上部小部件,QScrollArea
作为底部小部件(通过QVBoxLayout
)。
QScrollArea
表示QPushButton
的列表(实际上是网格布局),它可以包含(或不包含)大量按钮。
我希望我的应用程序符合以下限制:
- 两者(表单和列表)都消耗所有可用的水平空间,重新分配其内容以填充所有水平空间(也没有
SpaceItem
的内容页边距) - 两者都必须尽可能节省垂直空间,以便使"线"彼此靠近
我已经部分解决了在表单上使用setSizeConstraint(QLayout::SetFixedSize)
的问题,它可以垂直收缩表单,也可以水平收缩表单,导致列表和表单都有不同的宽度,看起来不太好。
我怎样才能做到这一点?我的意思是,如何指定类似grow horizontally to fill the widget but shrink vertically has much as possible
的内容?
添加一个间隔符作为布局的最后一项:
gridLayout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding), lastrow, 0);
我想这就是你想要的:
如果您知道将有多少列(并且它不会改变),请在最后一列中插入Stretch()(尽管它可能会给您带来与使用间隔符相同的效果)。
int columnCount = gridLayout()->columnCount();
gridLayout->insertStretch( columnCount(), 1 ); // Default stretch for other
请注意,这会将按钮的大小调整为Qt认为应该的大小,除非您明确更改它们的宽度。