这是一个将部件水平或竖直排列的布局管理器。
这个布局管理器在亲代容器的内部水平或竖直地排列部件 。空间会 被分割,以便让每个部件获得它的最小大小的空间,剩下的空间会根据那些部件之间的拉伸比例来分配 。部件的最小高度或宽度 被用来计算每个部件的大小 ,而这两个参数的默认 值可使用 WWidget::setMinimumSize() 来替换。
如果你想在一个没有高度限制的容器中使用这个布局管理器的话,你应当在 WContainerWidget::setLayout() 的对齐标志中指定AlignTop 。否则会发生怪异的事情 (亲代容器会继续变大 ,因为它会假设有一个高度限制 ,并且尝试满足它 ) 。
你可以使用WContainerWidget::setOverflow(OverflowAuto) ,或者使用一个 WScrollArea 来为插入到这个布局对象中的部件自动显示滚动条 。
关于布局管理器的一个警告,你不能放心大胆地使用样式单来为插入到布局对象中的部件添加边框 (或边距):在Internet Explorer 中有问题。为了安排整个布局,布局管理器需要为包含于其中的部件设置大小 ,但是这些大小也需要将边框 /边距宽度计算在内。由于 ,在IE 中,如果边框或边距是由一个样式单(与通过 WWidget::decorationStyle() 采用的内联CSS 不同)提供的话 ,这个值会是0,所以 ,将会产生奇怪的现象 ,例如部件的大小会持续地变大 。
布局管理器可在条目之间提供改变大小的把手,用户可使用那些把手来改变由布局管理器自动排列的布局 ( setResizable() )。 在一个竖向的盒状布局对象中的各行之间的改变大小的把手 只有在 那个布局管理器充满亲代部件的整个竖向空间 (也就是说 ,没有向上对齐 )的情况下才有用。同样地 ,在一个横向的盒状布局对象中的各列之间的改变大小的把手只有在那个布局管理器充满亲代部件的整个水平空间 (也就是说 ,没有向左、向右或居中对齐 )的情况下才有用。
每个条目都会被一个常量大小的空白分隔开 ,默认大小是6 个像素 ,可使用 setSpacing() 来改变。另外 ,如果这个布局对象是一个顶级的布局对象 (也就是说 ,没有嵌套到另一个布局对象中 )的话,就会在内容的周围设置一个间距 (margin) ,它会替代在容器中设置的填充距离 (padding) 。这个间距的默认大小是9 个像素 ,可使用 setContentsMargins() 来改变。不允许使用CSS 'padding'属性或 WContainerWidget::setPadding() 来为容器部件设置填充距离。你可以使用 addSpacing() 来在两个部件之间添加更多空白。
对于每个条目(item)都可以定义一个拉伸比例,它会控制剩下的空间的分配情况 。每个条目 都会根据拉伸比例来拉伸,以填充剩下的空间。
使用示例:
Wt::WContainerWidget *w = new Wt::WContainerWidget(this);
w->resize(WLength(), 600);
Wt::WBoxLayout *layout = new Wt::WBoxLayout(Wt::WBoxLayout::TopToBottom);
layout->addWidget(new Wt::WText("One"));
layout->addWidget(new Wt::WText("Two"));
layout->addWidget(new Wt::WText("Three"));
layout->addWidget(new Wt::WText("Four"));
w->setLayout(layout);
注意 :
这个布局管理器只能在WContainerWidget 容器部件中用。要在 Ext::Container 中用的话 ,必须间接地使用,需要先用 WFitLayout 来设置一个 WContainerWidget 。
当浏览器不支持JavaScript 时,只有Safari 和Firefox 能够正确地显示这个盒状布局。对于其它浏览器 ,只有水平布局会正确显示,而竖直布局的情况下,所有的部件都会使用它们的最小大小。
当在一个WContainerWidget 中使用的时候,这个布局管理器接受以下提示(参考 setLayoutHint() ):
•."table-layout",可选值是"auto"(默认)或"fixed"。
使用"fixed"以避免嵌套的表格溢出到布局之外。在那种情况下,你将需要为那些没有拉伸因子的列中每一列的最少一个条目指定一个宽度
(使用CSS 或其它方法)。
HxLauncher: Launch Android applications by voice commands