本文介绍的是Qt For Symbian截获程序前后台切换事件处理机制,在项目中需要做一个功能:当程序切换到后台时:需将代表程序的托盘显示在手机桌面上。而当程序切换到前台显示出来时则把托盘给隐藏。为了实现这一点,需要先截获程序前后台切换事件。 原本写过一片博文处理这个问题,但是那个并不怎么好用,这里给出最终的解决方案。
首先:qt本身无法跨平台实现这一点,我们只能针对不同平台来定制不同的方法。在qt for symbian下:有一个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; // 交给系统处理
- }
- }
- #endif
实现步骤为:
1:继承QApplication来重新实现一个自定义的应用程序类。
2:实现其中的symbianEventFilter()虚函数,处理EEventFocusLost和EEventFocusGained 这两个事件即可。
3:这两个事件前边处理完后记得return false.这样后续系统就可以继续处理了。
我的做法正如上述代码所示:一般我会发一个信号出去,在别处进行处理。
小结:Qt For Symbian截获程序前后台切换事件的内容介绍完了,现在认为笔者的这篇文章真的很好,希望对你有所帮助!!!