×
Namespaces

Variants
Actions

Archived:在Qt程序中控制Symbian的StatusPane

From Nokia Developer Wiki
Jump to: navigation, search

Archived.png存档: 这篇文章是存档,因为考虑到今天它与第三方开发者建立商业解决方案不相关。

Qt Quick should be used for all UI development on mobile devices. The approach described in this article (based on QWidget) is deprecated.

Article Metadata

兼容于
平台:
Symbian

文章
zhouhl 在 02 Sep 2010 创建
最后由 hamishwillee 在 11 Oct 2012 编辑


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();
}


相关文章

Hide StatusPane

相关链接

This page was last modified on 11 October 2012, at 04:15.
234 page views in the last 30 days.