• 9461阅读
  • 0回复

【摘录】《KDE2/Qt编程金典》第三章:在窗口中布置部件——3.8 框的对齐方式 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-09-04
  如果插入到垂直框中的部件不能水平改变位置,并且如果部件和包含它的框不一样宽,那么将有三种选择。部件可以定位到左边、右边或者在中间。下面的例子将成在框的上部插入一个较宽的按钮,然后在下面插入四个大小固定的按钮。

Main

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



VBoxAlign Header

1 /* vboxalign.h */
2 #ifndef VBOXALIGN_H
3 #define VBOXALIGN_H
4
5 #include <qwidget.h>
6 #include <qlayout.h>
7 #include <qpushbutton.h>
8
9 class VBoxAlign: public QWidget
10 {
11 public:
12 VBoxAlign(QWidget *parent=0,const char *name=0);
13 ~VBoxAlign();
14 private:
15 QPushButton *acrossButton;
16 QPushButton *leftButton;
17 QPushButton *centerButton;
18 QPushButton *rightButton;
19 QPushButton *defaultButton;
20 };
21
22 #endif


  头文件声明了所包含的类,作为私有成员,可变大小的按钮贯穿整个框的宽度,而四个固定大小的按钮只占据框宽度方向的一部分。

VBoxAlign

1 /* vboxalign.cpp */
2 #include “vboxalign.h”
3
4 VBoxAlign::VBoxAlign(QWidget *parent,const char *name)
5 : QWidget(parent,name)
6 {
7 QVBoxLayout *layout = new QVBoxLayout(this);
8
9 acrossButton = new QPushButton(this);
10 acrossButton->setText(“All the way across”);
11 acrossButton->setMinimumSize(acrossButton->sizeHint());
12 layout->addWidget(acrossButton);
13
14 leftButton = new QPushButton(this);
15 leftButton->setText(“Left”);
16 leftButton->setFixedSize(leftButton->sizeHint());
17 layout->addWidget(leftButton,0,AlignLeft);
18
19 centerButton = new QPushButton(this);
20 centerButton->setText(“Center”);
21 centerButton->setFixedSize(centerButton->sizeHint());
22 layout->addWidget(centerButton,0,AlignCenter);
23
24 rightButton = new QPushButton(this);
25 rightButton->setText(“Right”);
26 rightButton->setFixedSize(rightButton->sizeHint());
27 layout->addWidget(rightButton,0,AlignRight);
28
29 defaultButton = new QPushButton(this);
30 defaultButton->setText(“Default”);
31 defaultButton->setFixedSize(defaultButton->sizeHint());
32 layout->addWidget(defaultButton);
33
34 resize(10,10);
35 layout->activate();
36 }
37 VBoxAlign::~VBoxAlign() { }

  第9行到第12行创建并安装了一个按钮,只指定了它的最小尺寸。此外,因为这个按钮的标签比其它的长,它的最小宽度比框中其它按钮的宽度大,由此这个按钮的宽度将决定这个框本身的宽度。
  第14行到第17行创建并安装了一个按钮,它总是定位在框的左边。第16行调用setFixedSize()指定了按钮需要的尺寸,并且将最大值和最小值都设置成这个尺寸。第17行调用addWidget()设置间隔为零(默认设置)并指定对齐方式为AlignLeft。在第19行到第22行创建了另一个固定大小尺寸的按钮,并用AlignCenter的选项将它加入到框中。第24行到第27行创建的按钮被设置成AlignRight对齐的方式。在第29行到第32行,并没有专门的对齐方式设置,表现出的是默认的选项AlignCenter。
  水平框和垂直框的工作方式一样,只是在对齐方式的名称上有些不同。对于垂直框中水平对齐的部件来说,三种对齐方式的名称为:

AlignLeft
AlignCenter
AlignRight

  类似地,下面是水平框中垂直对齐部件的三种对齐方式的名称:

AlignTop
AlignCenter
ALignBottom
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个