• 8986阅读
  • 1回复

【摘录】《KDE2/Qt编程金典》第三章:在窗口中布置部件——3.10 布局也是一个部件 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-09-08
  KContainerLayout部件也可以用来对其它的部件进行定位和设置大小,它看起来有些像和QHBoxLayout的综合,但是它还具有一些特殊的属性。下面的例子使用KContainerLayout部件来对一组按钮进行定位和设置大小。
Main

1 /* main.cpp */
2 #include <kapp.h>
3 #include “container.h”
4
5 int main(int argc,char **argv)
6 {
7 KApplication app(argc,argv,”container”);
8 Container *container = new Container();
9 container->show();
10 app.setMainWidget(container);
11 return(app.exec());
12 }


Container Header

1 /* container.h */
2 #ifndef CONTAINER_H
3 #define CONTAINER_H
4
5 #include <qwidget.h>
6 #include <kcontainer.h>
7 #include <qpushbutton.h>
8
9 class Container: public QWidget
10 {
11 public:
12 Container(QWidget *parent=0,const char *name=0);
13 ~Container();
14 private:
15 QPushButton *sbOne;
16 QPushButton *sbTwo;
17 QPushButton *sbThree;
18 QPushButton *ebOne;
19 QPushButton *ebTwo;
20 QPushButton *ebThree;
21 };
22
23 #endif

  第15行到第20行声明了就要显示的6个按钮的指针
Container

1 /* container.cpp */
2 #include “container.h”
3
4 Container::Container(QWidget *parent,const char *name)
5 : QWidget(parent,name)
6 {
7 KContainerLayout *layout = new KContainerLayout(this);
8 layout->setOrientation(KContainerLayout::Vertical);
9
10 sbOne = new QPushButton(this);
11 sbOne->setText(“startONE”);
12 sbOne->setMinimumSize(sbOne->sizeHint());
13 layout->packStart(sbOne);
14
15 sbTwo = new QPushButton(this);
16 sbTwo->setText(“startTWO”);
17 sbTwo->setMinimumSize(sbTwo->sizeHint());
18 layout->packStart(sbTwo);
19
20 sbThree = new QPushButton(this);
21 sbThree->setText(“startTHREE”);
22 sbThree->setMinimumSize(sbThree->sizeHint());
23 layout->packStart(sbThree);
24
25 ebOne = new QPushButton(this);
26 ebOne->setText(“endONE”);
27 ebOne->setMinimumSize(ebOne->sizeHint());
28 layout->packEnd(ebOne);
29
30 ebTwo = new QPushButton(this);
31 ebTwo->setText(“endTWO”);
32 ebTwo->setMinimumSize(ebTwo->sizeHint());
33 layout->packEnd(ebTwo);
34
35 ebThree = new QPushButton(this);
36 ebThree->setText(“endTHREE”);
37 ebThree->setMinimumSize(ebThree->sizeHint());
38 layout->packEnd(ebThree);
39
40 resize(10,10);
41 }
42 Container::~Container() { }

  在第7行,创建了KContainerLayout部件,用Container对象作为它的父部件。在第8行,指定方向为垂直方向,这意味着所有加入到布局中的部件都将一个在另一个上方。
  在第10行到第12行,创建了第1个按钮,通过在第13行调用packStart(),将这个按钮加入到布局中。由于这个按钮是第一个被加入的,而且使用的是packStart(),所以它总是显示在最上面。第20行到第22行创建了第2个按钮,也是使用packStart()将其加入到布局中,也是使用packStart(),由此它将显示在前两个按钮的下边。
  从结尾端摆放部件与从开始端摆放部件的原理是一样的,只不过每个部件的摆放位置是从结尾端可获得的相邻位置开始插入的。在第25行到第27行创建了第一个加入到最下边的按钮,通过调用packEnd()来把它加入到布局中。第30行到第33行创建并加入的按钮直接插入到前一个按钮的上边,而第35行到第38行创建的按钮则位于前两个按钮的上边。
  注意:当KContainerLayout部件被调整大小的时候,所产生的效果依赖于这些按钮是怎样加入的。从开始端加入的按钮将保持在开始端一侧(上边或者左边),而那些从结尾端加入的按钮将保持在结尾一侧(下边或右边)。
  为了在水平方向上布置布局,或者删除第8行的代码(因为默认的是水平方向),或者用下面的代码替换掉第8行语句:

    layout->setOrientation(KContainerLayout::Horizontal);

  当布局的方向为水平时,packStart()方法将从左边开始插入部件,而packEnd()方法则从右边开始插入部件。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线w2010

只看该作者 1楼 发表于: 2007-04-01
plllllllllllllllllllllllllll
快速回复
限100 字节
 
上一个 下一个