×
Namespaces

Variants
Actions

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

From Nokia Developer 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 04:19.
159 page views in the last 30 days.
×