背景:
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