如何从 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 中的应用程序关闭已经打开的浏览器的主要内容,如果未能解决你的问题,请参考以下文章