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裡面建立的訊號與槽的關係,去呼叫相應的槽函式,該例即代表開啟主面板。