QT點擊"X"按鈕,調用closeEvent()函數來實現調用特定事件(附:粗略介紹QT的信號與槽的使用方法)


 背景:

  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里面建立的信號與槽的關系,去調用相應的槽函數,該例即代表打開主面板。

 

記錄地點:深圳WZ

記錄時間:2015年12月11日 19:49:47


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM