• 9416阅读
  • 1回复

【摘录】《KDE2/Qt编程金典》第二章:创建并显示一个窗口——2.4 复合部件 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-08-27
  可以通过调用assignMainWidget()为QApplication对象设计部件,此部件将被QApplication对象以应用程序主窗口的形式显示出来。为了显示一个包含不止一项的主窗口,需要创建自己的部件,把它作为主窗口显示并使用。下面的例子把两个按钮和一个标签组合到一个部件中:

1     /* threewidget.h */
2     #ifndef THREEWIDGET_H
3     #define THREEWIDGET_H
4    
5     #include <qpushbutton.h>
6     #include <qlabel.h>
7
8     class ThreeWidget: public QWidget
9     {
10     public:
11         ThreeWidget(QWidget *parent=0, const char *name=0);
12     private:
13         QPushButton *topButton;
14         QPushButton *bottomButton;
15         QLabel *label;
16     };
17
18     #endif

  第5行和第6行包含定义了部件的头文件,这些部件将作为复合部件的一部分来使用。这里将要用到两个按钮和一个标签,在threewidget.h文件中的第13行到第15行,把这两个按钮和一个标签的地址定为私有数据。

1     /* threewidget.cpp */
2     #include "threewidget.h"
3
4     ThreeWidget::ThreeWidget(QWidget *parent, const char *name):
5               QWidget(parent, name)
6     {
7         setMinimumSize(120, 180);
8         setMaximumSize(120, 180);
9
10         topButton = new QPushButton("Top Button", this);
11         topButton->setGeometry(15, 15, 90, 40);
12         label = new QLabel("Middle Label", this);
13         label->setGeometry(15, 70, 90, 40);
14         label->setAlignment(AlignVCenter | AlignHCenter);
15         bottomButton = new QPushButton("Bottom Button", this);
16         bottomButton->setGeometry(15, 125, 90, 40);
17     }

  因为需要成为一个可显示的部件,所有ThreeWidget类使用了QWidget作为它的基类。
  第7行和第8行设置了这个部件的最大值和最小值。父窗口将查询这个部件以决定它自己的大小。在这个例程中,最大值和最小值的设置是相同的,这样表明这个窗口是不可变的,不能用鼠标改变它的宽度和高度。
  上部的按钮是在第10行创建的,构造函数的第2个参数是将作为此按钮父类的部件,在这个例子中,父类是正在构造的新部件。在第12行和第15行为标签和另外一个按钮建立了同样的父子关系。
  新创建的部件的显示区域为120个像素宽、180个像素高。设置部件在窗口中的位置需要调用setGeometry()。在第11行调用了setGeometry(),将上部的按钮定位在离上端和左边各15像素的位置。同样调用此函数设置按钮的宽为80像素、高为40像素。类似地,在第13行和第16行调用了setGeometry()设置其它部件的位置。setGeometry()前两个参数定义左边和上边;后两个参数定义宽度和高度。
  这个程序的main()函数采用和对待其它部件一样的方法来处理这个新建的复合部件。

1     /* compound.cpp */
2     #include <qapplication.h>
3     #include "threewidget.h"
4
5     int main(int argc, char **argv)
6     {
7         QApplication app(argc, argv);
8         ThreeWidget threeWidget;
9         threeWidget.setGeometry(10, 10, 100, 100);
10         app.setMainWidget(&threeWidget);
11         threeWidget.show();
12         return(app.exec());
13     }

  在第8行中创建了这个threeWidget对象。部件不能强制固定为对其无效的大小尺寸,因此在第9行调用的setGeometry()是没有用的,因为在部件中已经定义了最大值和最小值。在第11行调用了show(),显示这个部件和它里面所包含的所有部件。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线mathbox

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