• 7879阅读
  • 1回复

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

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-08-30
  可以通过指定4个值来指定每个部件的确定位置和大小,它们分别是:水平坐标值、垂直坐标值、宽度和高度。以父窗口为坐标系统——即包含此部件的窗口。下面的例子举例说明了如何在一个应用程序窗口中放置三个按钮。

1     /* main.cpp */
2     #include <kapp.h>
3     #include "setxy.h"
4
5     int main(int argc, char **argv)
6     {
7         KApplication app(argc, argv, "setxy");
8         SetXY setxy;
9         setxy.show();
10         app.setMainWidget(&setxy);
11         return(app.exec());
12     }

  主程序相当简单,第3行包含了头文件,在第8行创建了按钮,并且在第10行调用了setMainWidget(),将其指定为主应用程序窗口要显示的部件。

1     /* setxy.h */
2     #ifndef SETXY_H
3     #define SETXY_H
4
5     #include <qpushbutton.h>
6    
7     class SetXY: public QWidget
8     {
9     public:
10         SetXY(QWidget *parent = 0, const char *name = 0);
11         ~SetXY();
12     private:
13         QPushButton *button1;
14         QPushButton *button2;
15         QPushButton *button3;
16     };
17
18     #endif

  SetXY类在定义中使用QWidget作为它的基类。它仅有的数据是在第13行到第15行所创建的3个QPushButton按钮指针。通常,应当定义作为slot的方法,以响应这些按钮,但在此只是为了简单的位置演示,由此没有方法响应这些按钮。
  注意:由于在setxy.h的第5行包含了qpushbutton.h头文件,所以此头文件自动被setxy.cpp和main.cpp所包含了。如果使用其它的部件,而它也包含了qpushbutton.h头文件,那么同一个头文件就被包含了两次。这就是为什么说第2行、第3行和第18行的预编译指令非常重要的原因了,这些预编译指令防止了头文件被不止一次的编译。

1     /* setxy.cpp */
2     #include "setxy.h"
3    
4     SetXY::SetXY(QWidget *parent, const char *name)
5         : QWidget(parent, name)
6     {
7         setMinimumSize(90, 40);
8         setMaximumSize(190, 220);
9         resize(190, 220);
10
11         button1 = new QPushButton("Upper Left", this);
12         button1->setGeometry(0, 0, 90, 40);
13
14         button2 = new QPushButton("Middle Right", this);
15         button2->setGeometry(90, 70, 100, 50);
16
17         button3 = new QPushButton("Bottom", this);
18         button3->setGeometry(45, 140, 50, 80);
19     }
20     SetXY::~SetXY(){}

  SetXY所做的所有工作都是在构造函数中完成的,定义并显示了3个按钮,左上角的按钮在第11行创建,它的大小和位置在第12行进行设置。传递给setGeometry()方法的4个整数的顺序是:
    x、y、width和height
  距离以像素为单位。x坐标值表示的是从应用程序主窗口的左边到被包含的widget左边的像素点的数目。y坐标值表示的是从应用程序窗口的上端到部件的上端的像素点的数目。也就是说,左上角是坐标系的原点。每个按钮在创建之后都通过setGeometry()函数指定大小和位置。
  注意:如果两个部件被放置成占据同样的位置,那么新的部件将覆盖旧的部件,因此,如果发现找不到某个部件,那么它很可能是被简单地隐藏了。
  在第7行、第8行和第9行定义了显示部件的规则。第7行的setMinimumSize()调用指定了这个部件必须被显示为至少90像素宽,40像素高。最小值的设置是很重要的,因为部件显示在窗口中的时候可以被用户改变大小。在第8行的setMaximumSize()调用设置了部件的高度和宽度的上限。最后,第9行的resize()调用将部件的最初的尺寸设置为可允许的最大尺寸。
  在第20行的~SetXY()析构函数什么也不做,因为当这个应用程序退出时,这个部件就被析构了,同时也将析构3个按钮,因为这个部件是3个按钮的父部件。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mathbox

只看该作者 1楼 发表于: 2006-10-14
哦,明白了,呵呵,顶下天呐,感谢斑竹
快速回复
限100 字节
 
上一个 下一个