×
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.
114 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×