1. 程式人生 > >QT點選"X"按鈕,呼叫closeEvent()函式來實現呼叫特定事件

QT點選"X"按鈕,呼叫closeEvent()函式來實現呼叫特定事件

背景:

  QT在使用者關閉視窗(直接點選"X"鍵)時,程式一般都需要做一些善後的事情,就我現在的程式來說,既關閉USB。如何實現?

正文:

  首先,在對應窗體的".h"檔案包含 #include <QCloseEvent>;的標頭檔案。

  其次,在該".h"檔案中宣告函式 void closeEvent( QCloseEvent * event);  注意:該函式已經在QT內部建立為點選"X"按鈕的槽,不能更改其函式名;

  最後,在對應窗體的".cpp"檔案中實現void closeEvent(QCloseEvent * event);函式。譬如在其內部實現關閉USB,以達到窗體關閉,USB描述符也被銷燬的目的。

參考文章:

  QT中關閉應用程式和視窗的函式

    http://blog.csdn.net/noif1655/article/details/10004777

  QT控制元件函式的重寫

    http://blog.csdn.net/qustdjx/article/details/20130853

附:粗略概括QT的訊號與槽的使用方法:

  以我曾寫過的FakeQQ(基於LAN的通訊軟體)為例,

  在main函式中建立訊號與槽的聯絡:

    QObject::connect(&Login, SIGNAL( LoginSuccess() ), &Panel, SLOT( OpenMainpanel() ) );

  以上的引數各代表什麼意義呢:

  Login 與 Panel均是我建立“登入窗體”和“主面板窗體”預設生成的兩個類,

  在Login類中,我建立了一個LoginSuccess()訊號,用例如下

  signals:

    void Login_success(void);

  這個便是訊號,不需要去實現具體的函式,只需宣告就夠了。QT會做剩下的工作。

  而在Panel類中,我建立了一個OpenMainpanel()的槽,用例如下: 

  Public slots:

    void OpenMainpanel(void);

  這個要注意的是,該槽需要實現具體的函式實體,該函式也就是你要具體做的事情。譬如就如該函式名稱而言,開啟主面板。

  那在程式中怎麼使用呢,很簡單:

  emit LoginSuccess();  // 傳送登入成功的訊號

  然後程式就會根據main裡面建立的訊號與槽的關係,去呼叫相應的槽函式,該例即代表開啟主面板。