在项目中需要做一个功能:当程序切换到后台时:需将代表程序的托盘显示在手机桌面上。而当程序切换到前台显示出来时则把托盘给隐藏。为了实现这一点,需要先截获程序前后台切换事件。 原本写过一片博文处理这个问题,但是那个并不怎么好用,这里给出最终的解决方案。
首先:qt本身无法跨平台实现这一点,我们只能针对不同平台来定制不同的方法。在qt for symbian下:有一个symbianEventFilter()事件过滤器,其可以截获所有symbian事件,这其中就包括前后台切换事件。不多说了,代码如下:
#ifdef Q_OS_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.这样后续系统就可以继续处理了。
我的做法正如上述代码所示:一般我会发一个信号出去,在别处进行处理。
--------------------------------------------------------------------------------------------------------------------------------------------
本文介绍了一种在Symbian平台上实现应用程序前后台切换检测的方法。通过重写QApplication并利用symbianEventFilter函数,可以准确地捕捉到应用从后台转前台或相反的情况。这种方式对于需要根据不同状态展示特定UI元素(如托盘图标)的应用非常有用。
2912

被折叠的 条评论
为什么被折叠?



