Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

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

From 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 01:15.
392 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.

×