第一节:hello,world!
第一个程序仅仅是一个hello-world例子程序。它仅含一些能够使这个程序运行起来的一些必要的代码。上面的图片是这个程序一张照片。
/**********************************************************************
**
**Qt指南 第一节
**
**********************************************************************/
#include
#include
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QPushButton hello( "Hello world!", 0 );
hello.resize( 100, 30 );
a.setMainWidget( &hello );
hello.show();
return a.exec();
}
逐行展示:
#include
这一行把Qapplication类的定义包含进来.在每一个Qt应用程序中必需有一个Qapplication 对象。Qapplication管理着所有的application-wide资源,例如默认字体和光标。
#include
这一行把Qpushbutton的定义包含进来。在参考文档中,提及的第一个类都要在需要文件的顶部被包含进来。 Qpushbutton是一个典型的GUI下压按钮,它能够被用户按下和释放。像每一个其它特件一样,它能够设置自己的外观和感觉。物件是用来处理用户输入和拖拽操作的用户接口。程序员可以改变它的全部的外观和感觉以及其它的一些次要的属性,例如颜色,也可以是内容。一个Qpushbutton可以显示文字或位图。
int main(int argc,char * argv){
main()函数是程序的进入点。在大多数情况下,当我们使用Qt时,main()仅仅是在进入控制Qt库之前进行一些初始值的设定,它将告认程序用户操作事作的一些情况.
argc是中命令行中参数的个数,argv是命令行参数数组。这是一个C/C++特征。这并不是Qt特有的,虽然Qt执行这些参数(看下面)。
Qapplication a(argc,argv);
a 是这个程序的Qapplication。在这里它被创建并执行一些命令行参数(就像在X11下的 -display 一样)。注意,所有被Qt识别出的命令行参数将会被从argv中移除(并且argc将会相应的减少)。有关的细节请参阅QApplication::argv() 文档。
注意:在Qt中,在进入window-system之前建立QApplication对象是最重要的。
QPushButton hello("hello world",0);
在这里,在建立QApplication之后,进入Window-system的第一句代码:一个Push Button被建立了。
这个按钮被设置成显示文本“hello world”,并且它自己成为一个窗口(因为按钮要进入的父窗口被设置成为了“0”)。
hello.resize(100,30); 这个窗口被设置成了100像素宽,30像素高(加上window-system框架)。在这里这不必关心这个按钮的位置,接受它的默认值就行了。
a.setMainWidget(&hello);
在这个应用中,这个按钮被选择成为main物件。如果用户关闭了main物件,这个应用就会退出。
您不必一定要有main物件,但大多数程序都有.
hello.show();
当物件被创建时它不会被显示。您必须呼叫show()便其可见。
return a.exec();
当这个应用程序退出时,这里是main()把控制权交给Qt的exec() 的地方。
在exec()中,Qt接收到并执行用户或系统事件并把这些交给适当的物件。
}
行动:
您可以试着编译并执行这个程序。
当您运行它时,您将会看到一个小的窗口,它被一个小按钮填充着,并且您能看到这个有名的“hello world”。
练习:
试着去改变窗口的大小。按一下按钮。如果您运行的是X11,试着用-geometry(e.g. -gemometry 100x200+10+20) 选项运行它。
现在您可以进行第二节了。
第二节:呼叫“退出”
在第一节我们建立一个窗口,现在我们使这个应用程序在用户发出退出信号时能够退出。
/****************************************************************
**
** Qt tutorial 2
**
****************************************************************/
#include
#include
#include
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QPushButton quit( "Quit", 0 );
quit.resize( 75, 30 );
quit.setFont( QFont( "Times", 18, QFont::Bold ) );
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );
a.setMainWidget( &quit );
quit.show();
return a.exec();
}
逐行展示:
#include
因为这个程序使用了QFont, 所以需要包含文件qfont.h。Qt的字体抽象同X提供的字体是不同。装载和使用这些字体都是被进行过高质最的最优化处理。
QPushButton quit("quit",0);
这一次,这个按钮被命名为“Quit”,并有当用户按这个按钮时也确实让它这么做。这并不一种巧合。我们仍然用0做为它的父窗口,因为这个按钮是一个顶级窗口
quit.resize(75,30);
我们为按钮选取另外一个尺寸,因为这次要显示的文本比"hello world"要稍微短一点。我们也可以使用QFontMetrics来设置合适的大小。
quit.setFont( QFont( "Times", 18, QFont::Bold ) );
这里,我们为按钮选取一个新的字体,Time字体中的18点粗。 注意我们是在点的基础上的建立字体的。
使用改变默认字体的方法(使用QApplication::setFont())来改变整个应用程序的字体也是可以的。
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );
connect()可能是Qt最重的特征。注意: connect()是一个Qwidget静态函数。不要被socket()函数库中的connect()函数弄糊涂了。
这一行为两个Qt对象间的联系建立了一种方法,这些对象包括QObject的继承类,直接的,间接的。每一个Qt对象都包括信号(用来发送消息)和槽(用来接收消息)。所有的物件都是Qt对象。他们继承QWidget而成为QObject的继承类。
在这里,quit的clicked()信号同a的quit()槽联系起来,这样,当按钮被单击时这个应用就会退出。
信号与槽文档(the Singal and Solts documentation 这个文档在Qt的官方网站可以找到,译者注)将会就这个问题进行详细的描述。
行为:
当您运行这个程序时您将会看到一个比第一节更小的窗口,并且被一个比第一节更小的按钮填充着。
练习:
试着调整窗口的大小。按一下按钮。呀! connect()看起来使程序做了一点不同的事。
有其它的信号可以用来联结quit()吗?关键:QPushButton继承了QButton的大部分行为。