2011-08-08 38 views
0

美好的一天!主要應用程序窗口和Qt中的對話交互

有一個問題:主窗口(例如MyApp)在後臺工作(在所有其他窗口或托盤後面),不需要無需顯示它。經過一段時間後,會出現一些提醒StayOnTop對話框(父母= 0,不與主窗口綁定)並要求進行一些用戶交互。對話框關閉後,我想保留一個當前正在工作的應用程序窗口用戶,並且用戶繼續完成他的工作而不切換到MyApp。但是,與上述行爲不同,主MyApp窗口出現,用戶強制切換回他的窗口(作業) - 不方便。

如何防止關閉對話框後出現MyApp主窗口?需要安裝一些事件過濾器或訪問OS API? Mac,Windows,Linux存在問題。

回答

0

也許只是嘗試調用對話框調用後的隱藏方法?其他可能性 - 嘗試設置: http://doc.qt.io/qt-4.8/qwidget.html#windowFlags-propQt::Popup

+0

Qt :: Popup不起作用,因爲它使對話框模式,並立即顯示主窗口。將嘗試隱藏對話框。 –

+0

隱藏也導致主窗口出現,似乎這個人是正確的:http://developer.qt.nokia.com/forums/viewthread/8495/#49421 –

0

如果其他窗口可見,您可以嘗試重新實現主窗口的showEvent並忽略該事件。

void main_window::showEvent(QShowEvent* e) 
{ 
    if(/*one or more of its children are visible */) 
    { 
     // nothing to do 
    } 
    else 
    { 
     QMainWindow::showEvent(e); 
    } 
} 
+0

想到這一點,只需要檢查如果主窗口獲取顯示事件關閉對話框後。但是,您的條件將不起作用,因爲在主窗口獲取顯示事件之前對話框將被關閉。需要考慮其他條件。 但是會檢查兩個提議的變體。 –

+0

該條件涉及您提到的_job-windows_。如果它們是'!isHidden()',則主窗口應該保持隱藏狀態。你知道我的意思? – Exa

+0

不,主窗口應在對話框關閉後保持隱藏狀態。沒關係,無論如何,這無效,因爲無效的MyWindow :: showEvent(QShowEvent *事件)從來沒有得到控制,我試過如下:void MyWindow :: showEvent(QShowEvent * event){if(!event-> spontaneous())QMainWindow :: showEvent(事件); else event-> ignore(); }' –