×
Namespaces

Variants
Actions

Qt中如何处理应用程序置于后台事件

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

兼容于
平台:
Symbian

文章
renlin 在 18 Nov 2011 创建
最后由 hamishwillee 在 13 Jun 2012 编辑

Contents

介绍

在手机开发中,我们经常会遇到应用程序会置于后台运行的情况,比如有电话打进来时、比如用户按下照相键时或者用户按下功能键时,当遇到这些情况时,应用程序需要捕捉这些事件,然后做相应的处理.

实现

在Qt中,这类应用程序被置于后台的时候会触发QEvent::ApplicationDeactivate 事件,我们需要在应用程序中处理这个事件,这里我们介绍安装事件过滤器的方法。 先实现一个QApplication的子类MyApplication,在MyApplication中要做的就是重写eventFilter()方法。

class MyApplication:public QApplication
{
Q_OBJECT
public:
explicit MyApplication(int argc, char **argv);
bool eventFilter(QObject *obj, QEvent *event);
 
};

在eventFilter()方法中处理QEvent::ApplicationDeactivate事件,并安装事件过滤器:

#include "myapplication.h"
#include <QEvent>
 
MyApplication::MyApplication(int argc, char **argv) :
QApplication(argc,argv)
{
installEventFilter(this);
}
 
bool MyApplication::eventFilter(QObject *obj, QEvent *event)
{
 
if (event->type() == QEvent::ApplicationDeactivate)
{
//implement your codes at here
 
return true;
}
 
else
{
return false;
}
}

此时我们用来过滤事件的MyApplication已经实现,只需要将其应用在我们的应用程序中就可以了:

 MyApplication a(argc,argv);
......
return a.exec();

我们知道在Qt中处理事件还可以其他方法,同样,我们这里还可以用重写QApplication::notify()来达到同样的目的:

bool MyApplication::notify(QObject *receiver,QEvent *event)
{
if (event->type() == QEvent::ApplicationDeactivate)
{
//implement your codes at here
 
return true;
}
 
else
{
return QApplication::notify(receiver,event);
}
}

总结

本文虽只介绍了应用程序置于后台事件的处理,但是这种处理的事件的方法却不仅限于此,比如你需要处理的是应用程序被激活的情况,本文介绍的处理方法也是可以借鉴的。

相关链接

This page was last modified on 13 June 2012, at 13:57.
135 page views in the last 30 days.