Linux 版 (精华区)
发信人: tcpip (高级草包), 信区: Linux
标 题: Qt tutorial 4---------"Let there be widgets"
发信站: 紫 丁 香 (Fri May 5 19:50:21 2000) WWW-POST
Subject Qt tutorial 4---------"Let there be widgets"
Posted by kensou
Posted on 5/2/2000 8:00 PM
第四章: Let There Be Widgets
这个例子演示如何创建你自己的控件,怎样控制控件的最大和最小尺寸.还将引入控间名称
(widget names).
/****************************************************************
**
** Qt tutorial 4
**
****************************************************************/
#include
#include
#include
class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
MyWidget::MyWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
{
setMinimumSize( 200, 120 );
setMaximumSize( 200, 120 );
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
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 a( argc, argv );
MyWidget w;
w.setGeometry( 100, 100, 200, 120 );
a.setMainWidget( &w );
w.show();
return a.exec();
}
Line by Line Walk-Through
class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
在这里我们创建了一个新的类(class).因为这个类继承于QWidget类,所以这个类是一个控
件,并且它可能是一个顶层窗口(top level window)或者是一个控件.(就象第三章的按钮
).
这个类只有一个成员:构造函数(另外还有从QWidget继承来的成员).次构造函数是一个标
准的Qt控件构造函数;当你创建一个控件时,你总要包含一个简单的构造函数.
第一个参数是它的父控件.如果要创建一个顶层控件,你要指明为一个空指针作为父控件.
如同你所见的,在缺省情况下,控件是一个顶层窗口.
lookup this widget later. Widget names will become really useful when Qt's
GUI designer is finished. 第二个参数是此控件的名字.它不是在标题栏(title bar)
或在按钮中.它是一个于控件相连的名字,它存在的目的是使次控件在以后能易于被 识别
(lookup)控件名字在以后会变得十分有用.
MyWidget::MyWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
造函数是从这里开始执行的.象所有的控件一样,它仅仅是把parent和name 传递给了
QWidget的构造函数.
{
setMinimumSize( 200, 120 );
setMaximumSize( 200, 120 );
因为这个控件不知道如何控制尺寸调整,我们就通过设置其最大尺寸和最小尺寸相等来弥
补这一点. 在下一章,我们将演示如何让控件响应resize事件.
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setGeometry( 62, 40, 75, 30 );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
这里,我们为这个控见定义并创建了一个名为"quit"的子控件.这个控件的名字与在按钮上
显示的文字并没有什么联系,在本实例中,它们仅仅是碰巧相似而已.
注意:quit是构造函数的一个局部变量,MyWidget并不能一直保持它,但是Qt可以,而且会在
MyWidget被销毁时自动地把它销毁.这就是MyWidget不需要析构函数的原因.另一方面,如
果你选择使用析构函数来销毁它也没有什么负面影响,子控件在将被销毁时会告知Qt.
setGeometry()函数的作用和前几章中的move()加上resize()的作用一样.
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
因为MyWidget类不知道应用对象的名称,所以它与一个指向应用对象的Qt指针qApp.相连.
控件是一个(软件元件)software component,而且应该尽量少地依赖于其使用环境以提高
它的通用性.
要知道应用对象的名字会打破这个原则,所以Qt就提供了一个宏,qApp,来告诉象MyWidget
一样需要知道应用对象名字的元件.
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyWidget w;
w.setGeometry( 100, 100, 200, 120 );
a.setMainWidget( &w );
w.show();
return a.exec();
}
这里我们用刚才声明的新控件定义了一个控件对象,设置它为主控件并执行应用.
程序行为
这个程序在行为上于前一个十分相似,不同的是在我们的实现方法上.仅仅是在习性上有轻
微的区别. 尝试改变它的尺寸来观察一下.
练习
尝试在main()中建立另一个MyWidget对象,会有什么情况发生?
尝试增加更多的按钮或者在控件中增加除了QPushButton外的控件.
可以改变一下背景颜色(background color)
你现在可以进入第五章了.
[前一章] [后一章] [教程目录]
------------------------------------------------------------------------------
--
Copyright ?1999 Troll Tech Trademarks Qt version 1.44
孤帆慕云浮,
一剑平江湖。
垂手叹镜月,
悔当草结庐
--
"这一千多年没写诗了?"
"写了, 不过只写了两句."
"千年得两句, 一定是万古丽句了. 念来听听."
"好吧, 我现丑了" 太白星清了清嗓子, 浑厚的男中音在天庭响起:
大海啊, 都是水;
骏马啊, 四条腿;
※ 来源:·紫 丁 香 bbs.hit.edu.cn·[FROM: freesrc.hit.edu]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.564毫秒