Qt For Symbian截獲程序前后臺切換事件
本文介紹的是Qt For Symbian截獲程序前后臺切換事件處理機(jī)制,在項(xiàng)目中需要做一個(gè)功能:當(dāng)程序切換到后臺時(shí):需將代表程序的托盤顯示在手機(jī)桌面上。而當(dāng)程序切換到前臺顯示出來時(shí)則把托盤給隱藏。為了實(shí)現(xiàn)這一點(diǎn),需要先截獲程序前后臺切換事件。 原本寫過一片博文處理這個(gè)問題,但是那個(gè)并不怎么好用,這里給出最終的解決方案。
首先:qt本身無法跨平臺實(shí)現(xiàn)這一點(diǎn),我們只能針對不同平臺來定制不同的方法。在qt for symbian下:有一個(gè)symbianEventFilter()事件過濾器,其可以截獲所有symbian事件,這其中就包括前后臺切換事件。不多說了,代碼如下:
- bool CQQApplication::symbianEventFilter( const QSymbianEvent* event )
- {
- const TWsEvent* pWsEvent = event->windowServerEvent();
- if ( pWsEvent == NULL )
- {
- return false;
- }
- if( EEventFocusLost == pWsEvent->Type() )//切換到后臺
- {
- emit signal_Foreground(false);
- return false;
- }
- else if( EEventFocusGained == pWsEvent->Type() )//切換到前臺
- {
- emit signal_Foreground(true);
- return false;
- }
- else
- {
- return false; // 交給系統(tǒng)處理
- }
- }
- #endif
實(shí)現(xiàn)步驟為:
1:繼承QApplication來重新實(shí)現(xiàn)一個(gè)自定義的應(yīng)用程序類。
2:實(shí)現(xiàn)其中的symbianEventFilter()虛函數(shù),處理EEventFocusLost和EEventFocusGained 這兩個(gè)事件即可。
3:這兩個(gè)事件前邊處理完后記得return false.這樣后續(xù)系統(tǒng)就可以繼續(xù)處理了。
我的做法正如上述代碼所示:一般我會(huì)發(fā)一個(gè)信號出去,在別處進(jìn)行處理。
小結(jié):Qt For Symbian截獲程序前后臺切換事件的內(nèi)容介紹完了,現(xiàn)在認(rèn)為筆者的這篇文章真的很好,希望對你有所幫助!!!