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

Posted

技术标签:

【中文标题】如何从 Qt 中的应用程序关闭已经打开的浏览器【英文标题】:How to close already open browser from application in Qt 【发布时间】:2012-04-04 07:45:04 【问题描述】:

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

如果浏览器已经在后台打开,有什么方法可以检查并关闭它?

【问题讨论】:

没有这样的检查。窗口系统可能不允许将正在运行的浏览器置于前台(在 Windows 中,前台进程需要允许这样做)。如果它即使在后台也没有打开 URL,那将是一个错误。你在哪个平台上? 你正在为哪个平台编码,对于 symbian,我认为你需要特殊的能力才能做到这一点。 @Kunal 我正在为 symbain 平台编码,我也在尝试这个链接,但它显示错误 link @FrankOsterfeld 如果浏览器已经打开,我正在尝试关闭它 我不确定如何关闭浏览器,但您可以通过添加 SwEvent" 功能来提升现有浏览器。TARGET.CAPABILITY += "SwEvent" 【参考方案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”并制作已签名的应用程序。这将解决问题:)

【讨论】:

@Kunal 你对这个答案有什么意见吗?/【参考方案2】:
QDesktopServices::openUrl(QUrl("http://google.com"));

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

参考这个LINK

【讨论】:

以上是关于如何从 Qt 中的应用程序关闭已经打开的浏览器的主要内容,如果未能解决你的问题,请参考以下文章

如何从 servlet 打开一个全新的浏览器 [关闭]

如何从 qt 应用程序 (c++) 打开可执行文件

如何从我的应用程序关闭 Safari

Qt:如何关闭用 exec() 打开的对话框窗口?

从qt中的另一个线程运行qtconcurrent时如何关闭程序

用 Qt 下载文件?