×
Namespaces

Variants
Actions

如何在Meego上获取系统事件和信息

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

代码示例
文章
zhouhl 在 28 May 2011 创建
最后由 hamishwillee 在 11 Oct 2012 编辑

Contents

引言

在开发程序的时候经常会遇到需要获取一些系统事件或者信息的情况,比如获取程序转入后台或者被激活的事件,取得当前网络情况、电量等系统信息等等。Qt 为我们提供了多种途径来获取这些东西,本文就做一总结。不仅仅是 Meego 平台,这些方法对其他平台也都是类似的。

使用事件过滤器

我们首先做这样一个类:

class EventEater : public QObject 
{
Q_OBJECT
public:
explicit EventEater(QObject *parent = 0);
signals:
protected:
bool eventFilter(QObject *obj, QEvent *event);
public slots:
};

这个类是作用就是拦截所有系统发送给应用程序的事件,然后决定如何处理。这里的关键点是实现 eventFilter 函数,如果不想让应用程序继续处理某个事件就返回 true,否则返回 false。

在下面的代码中,我们 debug 输出了所有发送给应用程序的事件类型。对应事件类型所代表的含义详见:QEvent Tppe

bool EventEater::eventFilter( QObject* obj, QEvent* event)
{
qDebug() << event->type() ;
if (event->type() == QEvent::ApplicationActivate) {
//add what you want to do
qDebug() << "Activate";
}
else if (event->type() == QEvent::ApplicationDeactivate) {
//add what you want to do
qDebug() << "DeActivate";
}
return QObject::eventFilter(obj, event);
}

最后给应用程序装上这个事件过滤器就可以了:

QApplication app(argc,argv); 
EventEater eater;
app.installEventFilter(&eater);

直接获取 X Event

QApplication 中有一个方法:

virtual bool   x11EventFilter ( XEvent * event )

重写这个方法就可以直接获得从 Linux 上的 X server 发来的 X Events 了。

这个方法可以直接获取平台自己的事件。对应的还有:

virtual bool   qwsEventFilter ( QWSEvent * event )

以及Symbian平台上的:

virtual bool   symbianEventFilter ( const QSymbianEvent * event )


使用Qt Mobility 的 QtSystemInfo 模块

目前 QtSystemInfo 模块已经可以为我们提供大部分手机上的系统信息了。

详情见: QtSystemInfo


使用平台自身 native 代码

最后,如果以上方法都没法获得我们想要的事件和信息的话,就只有通过使用平台相关的代码了。我们可以自己把平台自身的代码进行封装提供给 Qt 程序使用。

下载例程

Media:eventFilter.zip


相关链接

This page was last modified on 11 October 2012, at 04:19.
174 page views in the last 30 days.
×