2012-04-04 114 views
3

我使用QDeskTopServices在我的Qt應用程序中打開一個URL,但如果瀏覽器在後臺已經打開,它不來的前景和不上呼籲什麼QDeskTopServices如何從應用程序關閉已打開的瀏覽器中的Qt

有沒有什麼方法可以檢查並關閉瀏覽器,如果它已經在後臺打開?

+0

有沒有這樣的檢查。將運行的瀏覽器引導到前臺可能不被窗口系統允許(在Windows中,前臺進程需要允許)。如果它甚至不在後臺打開該URL,那就是一個錯誤。你在哪個平臺上? – 2012-04-04 08:33:33

+0

你正在編碼的平臺,對於symbian,我認爲你需要特殊的能力來做到這一點。 – Kunal 2012-04-04 09:11:55

+0

@Kunal我編碼symbain平臺,我想這個環節還可以,但它顯示了我錯誤[鏈接](http://www.developer.nokia.com/Community/Wiki/TSS000340_-_Launching_the_Web_browser_on_S60_3rd_Edition_to_open_a_specified_URL) – abhishek 2012-04-04 09:52:08

回答

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」並製作簽名應用程序即可。這將解決問題:)

+0

@Kunal你對這個答案的任何投入?/ – abhishek 2012-04-09 15:13:18

+0

@kunal感謝您的幫助 – abhishek 2012-04-20 07:00:38

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

使用上述行可以打開瀏覽器。在project.pro文件,並簽署應用:也只是增加「TARGET.CAPABILITY + = SwEvent塞班」。

推薦這個LINK

相關問題