事件是對各種應用程式需要知道的由應用程式内部或者外部産生的事情或者動作的通稱。對于初學者,總會對Qt中信号和事件的概念混淆不清。其實,記住事件比信号更底層就可以了。比如說,我們用滑鼠按下界面上的一個按鈕,它會發射clicked()單擊信号,但是,它怎麼知道自己被按下的呢,那就是通過滑鼠事件處理的。這裡可以看到,滑鼠事件比信号更底層。 在Qt中處理事件有多種方法,不過最常用的是重寫Qt事件處理函數。這裡我們就以滑鼠事件和鍵盤事件為例來進行簡單的介紹。
環境是: Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1
目錄 一、滑鼠事件 二、鍵盤事件
正文 一、滑鼠事件 1. 建立Qt Gui應用,項目名稱為“myEvent”,基類更改為QWidget,類名為Widget。
2. 完成項目建立後,在設計模式向界面上拖入一個Push Button。
3. 在widget.h檔案添加滑鼠按下事件處理函數聲明: protected : void mousePressEvent ( QMouseEvent *);
4. 到widget.cpp檔案中先添加頭檔案包含: #include <QMouseEvent> 然後在下面添加函數的定義: void Widget ::mousePressEvent( QMouseEvent *e) { ui -> pushButton -> setText(tr("(%1,%2)").arg(e->x()).arg(e->y())); } 這裡的arg()裡的參數分别用來填充%1和%2處的内容,arg()是QString類中的一個靜态函數,使用它就可以在字元串中使用變量了。其中x()和y()分别用來傳回滑鼠光标所在位置的x和y坐标值。這樣,當滑鼠在界面上點選時,按鈕就會顯示出目前滑鼠的坐标值。效果如下圖所示。
除了滑鼠按下事件,還有滑鼠釋放、輕按兩下、移動、滾輪等事件,其處理方式與這個例子是相似的。
二、鍵盤事件 1. 首先在widget.h中添加protected函數聲明: void keyPressEvent ( QKeyEvent *);
2. 然後到widget.cpp中添加頭檔案包含: #include <QKeyEvent>
3. 最後添加鍵盤按下事件處理函數的定義: void Widget ::keyPressEvent( QKeyEvent *e) { int x = ui -> pushButton -> x(); int y = ui -> pushButton -> y(); switch (e-> key()) { case Qt :: Key_W : ui -> pushButton -> move(x, y-10); break; case Qt :: Key_S : ui -> pushButton -> move(x, y+10); break; case Qt :: Key_A : ui -> pushButton -> move(x-10, y); break; case Qt :: Key_D : ui -> pushButton -> move(x+10, y); break; } }
這裡我們先擷取了按鈕的位置,然後使用key()函數擷取按下的按鍵,如果是指定的W、S、A、D等按鍵時則移動按鈕。所有的按鍵都在Qt::Key枚舉變量中進行了定義,大家可以在幫助文檔中進行檢視。
結語 除了鍵盤按下事件,常用的還有鍵盤釋放事件,這裡就不再舉例。如果想了解更多事件方面的知識,可以參考 《Qt Creator快速入門》 一書的第6章的内容。