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.

在Qt程序中强制S60浏览器打开一个新页面

From Wiki
Jump to: navigation, search
Article Metadata

兼容于
平台:
Symbian

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

Contents

引言

在Qt程序中想打开一个网页,我们有这么几种方式。一是自己创建一个QWebView对象,然后用它打开,这时我们获得的是对页面的完全控制,不过我们自己要写许多代码。二是我们可以打开一个外部浏览器,例如在Symbian上打开其自带的S60浏览器,可以简单的这样写:

QDesktopServices::openUrl(QUrl(tr("[[Qt 开发")));]]

或者使用QProcess:

QString browserProgram = "z:\\sys\\bin\\BrowserNG.exe";
QStringList url;
url << "4" << " [[Qt 开发";]]
QProcess::startDetached(browserProgram, url);

但是使用后两种方式是无法完全控制程序外部Symbian自带的这个浏览器的,例如如果该浏览器已经被打开,则上述代码的操作是失败的,即网页不会在浏览器中被打开。

于是我们就可以通过本文介绍的方法,通过直接使用Symbian代码,不但可以启动浏览器打开新页面,而且在浏览器已经被占用的情况下仍可打开新页面。

加入头文件

在需要打开新页面的源文件中加入下列头文件:

#include <coemain.h>
#include <eikenv.h>
#include <e32base.h>
#include <e32cmn.h>
#include <e32des8.h>
#include <e32std.h>
#include <apgtask.h>
#include <apgcli.h>


加入库文件

在pro文件中为Symbian添加下列库:

    LIBS += -lcone \
-leuser \
-lapgrfx \
-leikcore


给程序添加能力

我们需要给程序添加一些必要的能力,才能使其正常工作。使用本方法需要的能力都可以通过open signed online获得。

TARGET.CAPABILITY += ReadUserData WriteUserData UserEnvironment NetworkServices  \
ReadDeviceData WriteDeviceData ProtServ PowerMgmt \
SwEvent LocalServices


打开新页面的完整代码

在需要打开页面的地方加入以下代码就可以了:

#if defined(Q_WS_S60)
 
RApaLsSession apaLsSession;
const TUid KOSSBrowserUidValue =
{
0x10008D39
};
HBufC* param = HBufC::NewLC(64);
param->Des().Copy(_L("4 [[Qt 开发"));]] //change the url to what you want to open. parameter = “4” + ”<Space>“ + ”<Url>”
TUid id(KOSSBrowserUidValue);
TApaTaskList taskList(CEikonEnv::Static()->WsSession());
TApaTask task = taskList.FindApp(id);
if(task.Exists())
{
task.BringToForeground();
HBufC8* param8 = HBufC8::NewLC(param->Length());
param8->Des().Append(*param);
task.SendMessage(TUid::Uid(0), *param8); // UID not used
CleanupStack::PopAndDestroy(param8);
}
else
{
if(!apaLsSession.Handle())
{
User::LeaveIfError(apaLsSession.Connect());
CleanupClosePushL( apaLsSession ); // added this
}
TThreadId thread;
User::LeaveIfError(apaLsSession.StartDocument(*param, KOSSBrowserUidValue, thread));
CleanupStack::PopAndDestroy(); // apaLsSession
}
CleanupStack::PopAndDestroy( param);
 
#endif


测试设备

本代码已通过在N97和N8上的测试。不但可以启动浏览器打开新页面,而且在浏览器已经被占用的情况下仍可打开新页面。


相关文章

How to launch other applications in Qt

相关链接

This page was last modified on 11 October 2012, at 01:19.
262 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.

×