Qt4.4参考文档翻译之教程4—使用窗口部件

QT教程4-使用窗口部件

 

文件:

                            

                   

这个例子显示了如何创建一个你自己的窗口部件,描述了如何控制一个窗口部件的最小大小和最大大小。

 

#include <QApplication>

 #include <QFont>

 #include <QPushButton>

 #include <QWidget>

 

 class MyWidget : public QWidget

 {

 public:

     MyWidget(QWidget *parent = 0);

 };

 

 MyWidget::MyWidget(QWidget *parent)

     : QWidget(parent)

 {

     setFixedSize(200, 120);

 

     QPushButton *quit = new QPushButton(tr("Quit"), this);

     quit->setGeometry(62, 40, 75, 30);

     quit->setFont(QFont("Times", 18, QFont::Bold));

 

     connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));

 }

 

 int main(int argc, char *argv[])

 {

     QApplication app(argc, argv);

     MyWidget widget;

     widget.show();

     return app.exec();

 }

 

一行一行地品读

 

class MyWidget : public QWidget

 {

 public:

     MyWidget(QWidget *parent = 0);

 };

这里我们创建了一个新类。因为这个类继承了QWidget,所以新类是一个窗口部件,并且可以为一个顶层窗口或者子窗口部件(像第前一章的QPushButton)。

这个类只有一个成员:一个构造函数(加上从QWidget继承来的成员函数)。这个构造函数是一个标准的Qt窗口部件构造函数,当你创建窗口部件的时候你应该总是包含一个相似的构造函数。

这个参数是它的父窗口部件。为了生成一个顶层窗口,你需要指定一个空指针作为父窗口部件。就像你看到的那样,这个窗口部件默认地被认做是一个顶层窗口。

MyWidget::MyWidget(QWidget *parent)

 

构造函数的实现从这里开始。同大多数窗口部件一样,它把parent传递给了QWidget构造函数。

     : QWidget(parent)

 {

     setFixedSize(200, 120);

 

因为这个窗口部件不知道如何处理重新定义大小,我们固定它的值。在下一章,我们将演示一个窗口部件如何响应用户的重新定义大小事件。

     QPushButton *quit = new QPushButton(tr("Quit"), this);

     quit->setGeometry(62, 40, 75, 30);

     quit->setFont(QFont("Times", 18, QFont::Bold));

 

这里我们创建并设置了这个窗口部件的一个子窗口部件(新窗口部件的父窗口部件是this,例如MyWidget)。

 

函数tr()逐字调用字符串“Quit”来标记字符串的译文,使得其能够根据实际需要来改为翻译后的内容。在用户能够看到的字符串的地方使用tr()是一个好习惯,例如你决定以后将你的应用程序翻译成其他语言的。

 

注意quit是这个构造函数的一个局部变量。MyWidget不能跟踪它,但是Qt可以,并且在MyWidget被删除的时候自动删除它。这就是为什么MyWidget不需要一个析构函数的原因。(另一方面,删除一个子窗口部件也没有什么坏处,如果你选择的话。这个子窗口部件会自动告诉Qt它的即将死亡。)

 

QWidget::setGeometry()同时调用窗口部件的屏幕方位和大小的集合。它和在QWidget::resize()之后调用QWidget::move()是同等的。

 

     connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));

 }

 

指针qApp是一个在头文件<QApplication>中声明的全局变量。它指向应用程序的唯一QApplication实例。

 

int main(int argc, char *argv[])

 {

     QApplication app(argc, argv);

     MyWidget widget;

     widget.show();

     return app.exec();

 }

 

这里我们举例说明了我们的新子窗口部件,演示并执行这个应用程序。

 

运行这个程序

 

这个程序在行为上和第一章非常相似。不同在于我们实现的方式。但它的行为还是有些细微的差别。试着改变它的大小看一看。

 

练习

 

试着在main()中创建另一个MyWidget对象。发生了什么?

 

试着添加更多的按钮或者把除了QPushButton.之外的东西放到窗口部件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值