Archived:在Qt程序中控制Symbian的StatusPane
文章信息
Contents |
引言
习惯写Symbian程序的同学们在用Qt for Symbain时总会觉得有点像隔了一层什么东西,想控制系统底层的东西总觉得不太方便,或者在当前的Qt for Symbain版本中根本没有提供相应的接口。
比如我们几乎时刻都能看到的Symbian手机上的状态栏StatusPane,如果我们想控制它该怎么办呢?如果是简单的隐藏一下什么的目前的Qt for Symbain还可以做得到,但如果我们的程序想更改StatusPane的布局,现在的Qt 4.6.3是暂时做不到的。
那么我们就可以通过本文介绍的方法,直接获取StatusPane的指针,于是StatusPane就可以任由我们操纵啦!
加入头文件
在需要获得StatusPane的指针的源文件中加入下列头文件:
#include <coemain.h>
#include <aknappui.h>
#include <eikspane.h>
#include <eikenv.h>
加入库文件
在pro文件中为Symbian添加下列库:
LIBS += -lcone \
-lavkon \
-leikcore \
-leikcoctl
获取StatusPane指针
非常简单,在Qt代码中加入以下代码就可以了:
#if defined(Q_WS_S60)
CAknAppUi *aknAppUi = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
CEikStatusPane* statusPane = aknAppUi->StatusPane();
#endif
注意事项
注意:加入上述代码仅仅是完成了一半!上述代码放置的位置是非常重要的,否则获得的指针可能为空甚至会造成运行时错误!
决不能在主窗口执行完show()操作之前的位置加入上述代码!因为此时StatusPane还没有创建。注意,我这里不是指的代码的物理位置,是指运行时的先后顺序。
我们可以把这段代码放在主窗口执行完show()操作之后的任何阶段执行。具体位置由大家的具体需求来定。
示例代码
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <coemain.h>
#include <aknappui.h>
#include <eikspane.h>
#include <eikenv.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
#if defined(Q_WS_S60)
w.showMaximized();
CAknAppUi *aknAppUi = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
CEikStatusPane* statusPane = aknAppUi->StatusPane();
//do what you want. e.g. statusPane->MakeVisible(EFalse);
#else
w.show();
#endif
return a.exec();
}


(no comments yet)