qt指南(轉)

subid發表於2007-08-17
qt指南(轉)[@more@]第一節: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的大部分行為。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10796304/viewspace-963315/,如需轉載,請註明出處,否則將追究法律責任。

相關文章