这是一个储存并管理子代部件的部件。
WContainerWidget充当着一个子代部件的容器的角色。子代部件可直接添加到容器中,或者使用一个布局管理器来添加。
使用addWidget()或者将容器作为参数传递给一个部件的构造函数以实现将子代部件直接添加到容器中,这种方式不使用布局管理器 。在那种情况下,将使用基于CSS的布局,而最终的显示结果取决于子代部件和容器的属性。默认情况下,WContainerWidget是作为块元素显示的,并且在一个方框中安放它的子代部件 。内联的子代部件会布局到一行中 ,并且在必要的时候自动换行 ,而块元素的子代部件会竖直地堆叠起来。容器可使用 setPadding() 在容器的边缘添加填充间距 (padding),并使用 setContentAlignment() 来安排内容的对齐方式 。容器在默认情况下会 被渲染成HTML div 标记,但是可以使用 setList() 来将它变成一个HTML ul 或 ol 标记,以 便利用其它CSS 布局技术。另外 ,由 WAnchor 、 WGroupBox 、 WStackedWidget 和 WTableCell 对这个类进行的特殊化实现会提供其它的渲染方式 。
如果把WContainerWidget 设置成内联的 ,那么这个容器只会充当一个概念上的容器,给它的子代部件提供一个公用的样式 。内联的子代部件仍然在这个容器的亲代容器的布局流中以内联方式布局,就好像它们是直接插入到那个亲代容器中去的一样 。块元素的子代部件是不允许的 (这是按照HTML 规范来的)。
要使用布局管理器,而不是基于CSS 的布局的话,就使用 setLayout() 或将这个容器作为参数传递给一个布局管理器的构造函数 。在那种情况下 ,你不应当为容器定义任何的填充间距 ,并且部件和嵌套的布局管理器 都必须添加到这个布局管理器中,而不是直接添加到容器中。
使用示例:
//示例1:
//实例化一个容器部件,并且添加一个子代部件,
//它们的布局由HTML/CSS 规则控制。
Wt::WContainerWidget *container1 = new Wt::WContainerWidget();
container1->addWidget(new Wt::WText("Some text"));
container1->addWidget(new Wt::WImage("images/img.png"));
Wt::WContainerWidget *child3 = new Wt::WContainerWidget(container1);
//示例2:
//实例化一个使用布局管理器的容器部件
Wt::WContainerWidget *container2 = new Wt::WContainerWidget();
container2->resize(WLength::Auto, 600); //设置一个固定的高度。
Wt::WVBoxLayout *layout = new Wt::WVBoxLayout();
layout->addWidget(new Wt::WText("Some text"));
layout->addWidget(new Wt::WImage("images/img.png"));
container2->setLayout(layout); //为容器设置布局管理器。
在使用布局管理器的时候,你需要针对这个容器仔细地考虑布局管理器的对齐方式 :如果容器的高度没有限定 (没有明确使用 resize() 或一个样式单类来指定 ,并且这个容器没有包含到另一个布局管理器中 ),那么你应当将AlignTop 传递给 setLayout() 。
取决于它的配置和使用情况,这个部件会对应于以下HTML 标记:
•.默认情况下,对应于一个<div>标记。
•.如果使用setInline(true)设置过,那么它对应于一个 <span> 。
•.如果使用setList(true)设置过,那么它对应于一个 <ul> 。
•.如果使用setList(true, true)设置过,那么它对应于一个 <ol> 。
•.如果被插入到一个 isList() ( 被设置为列表 )的容器部件中,那么它对应于一个 <li> 。
这个部件不提供样式设置, 可使用内联或外部CSS 来设置样式 。
HxLauncher: Launch Android applications by voice commands