在这一章里,前面所有的例子都是在部件内部创建某种布局管理器。然而,因为KContainerLayout也是一个部件,所以它也可以被扩展,而不仅仅是简单地使用。也就是说,这个部件不再“有”一个布局对象,它本身就“是”一个布局对象。下面的例子创建了一个能够包含其它部件的部件。
Main
1 /* main.cpp */
2 #include <kapp.h>
3 #include “iscontainer.h”
4
5 int main(int argc,char **argv)
6 {
7 KApplication app(argc,argv,”iscontainer”);
8 IsContainer *iscontainer = new IsContainer();
9 iscontainer->show();
10 app.setMainWidget(iscontainer);
11 return(app.exec());
12 }
这个部件也是像其它部件一样进行处理。在第8行创建了此部件,并在第10行将它作为主窗口部件。它是拥有布局组件还是本身就是布局组件,其实并没有关系,只要它是一个部件就行。
IsContainer Header
1 /* iscontainer.h */
2 #ifndef ISCONTAINER_H
3 #define ISCONTAINER_H
4
5 #include <qwidget.h>
6 #include <kcontainer.h>
7 #include <qpushbutton.h>
8
9 class IsContainer: public KContainerLayout
10 {
11 public:
12 IsContainer(QWidget *parent=0,const char *name=0);
13 ~IsContainer();
14 private:
15 QPushButton *One;
16 QPushButton *Two;
17 QPushButton *Three;
18 };
19
20 #endif
这个类定义和以前出现的类定义的主要不同在于,在第8行,IsContainer是由KContainerLayout继承而来的,而不是直接从QWidget继承。IsContainer类也还是一个部件,因为KContainerLayout是由QWidget继承而来的。
IsContainer
2 #include “iscontainer.h”
3
4 IsContainer::IsContainer(QWidget *parent,const char *name)
5 : KContainerLayout(parent,name)
6 {
7 setOrientation(KContainerLayout::Vertical);
8
9 One = new QPushButton(this);
10 One->setText(“BUTTON ONE”);
11 One->setMinimumSize(One->sizeHint());
12 packStart(One);
13
14 Two = new QPushButton(this);
15 Two->setText(“BUTTON TWO”);
16 Two->setMinimumSize(Two->sizeHint());
17 packStart(Two);
18
19 Three = new QPushButton(this);
20 Three->setText(“BUTTON THREE”);
21 Three->setMinimumSize(Three->sizeHint());
22 packStart(Three);
23
24 resize(10,10);
25 }
26 IsContainer::~IsContainer() { }
第5行的代码用来初始化上面的类(包括QWidget类)。第7行将方向设置为垂直方向。第9行到第22行创建了3个按钮,并通过调用packStart()将它们加入到容器中。