如何从Qt中的应用程序关闭已打开的浏览器

时间:2012-04-04 07:45:05

标签: qt qt4 symbian

我正在使用QDeskTopServices在我的应用程序中打开Qt中的URL,但如果浏览器已经在后台打开,则它不会出现在前台,并且在调用QDeskTopServices时不执行任何操作。

如果浏览器已在后台打开,有没有办法检查并关闭它?

2 个答案:

答案 0 :(得分:1)

我找到了将浏览器置于最前面的答案,但仍然需要将Url传递给浏览器。

#if defined(Q_WS_S60)
    TPtrC16 textPtr(reinterpret_cast<const TUint16*>(theUrl.utf16()));
    HBufC *param = HBufC::NewMaxLC(textPtr.Length());
    param->Des().Copy(_L("4 http://google.com"));

    RApaLsSession apaLsSession;
    const TUid KBrowserUid = {0x10008D39};

    TApaTaskList taskList(CEikonEnv::Static()->WsSession());
    TApaTask task = taskList.FindApp(KBrowserUid);
    if (task.Exists()){
        // Switch to existing browser instance
        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());
        }
        TThreadId thread;
        User::LeaveIfError(apaLsSession.StartDocument(*param, KBrowserUid, thread));
        apaLsSession.Close();
    }

    CleanupStack::PopAndDestroy(param);
#else
    //QDesktopServices::openUrl(QUrl("http://google.com"));
#endif

如果有任何建议,请将其添加到答案中。

问题解决了,只需在project.pro文件中添加“symbian:TARGET.CAPABILITY + = SwEvent”并制作签名应用。这将解决问题:)

答案 1 :(得分:0)

QDesktopServices::openUrl(QUrl("http://google.com"));

使用上面的行可以打开浏览器。还可以在project.pro文件中添加“symbian:TARGET.CAPABILITY + = SwEvent”并制作签名应用程序。

请参阅此LINK