2011-08-20 150 views
1

當對話框的accept()插槽被調用時,我應該如何最好地強制QDialog保持打開狀態?我正在考慮重新實現這個功能,讓對話框的exec在沒有隱藏對話框的情況下返回,但想知道是否有更好的方法來完成這個任務。強制QDialog保持打開狀態

回答

2

而不是使用QDialog,我會用QDockWidget完成這個效果。

  • 刪除功能,使碼頭被移動(QDockWidget :: DockWidgetMovable)
  • 將停靠小部件浮動(setFloating(真))
  • 碼頭上的小部件連接項目到適當的信號和在主窗口中時隙

參考

+0

嗯,但我目前在該QDialog上使用'exec()'。當用戶在'QDockWidget'中輸入一些值時,我怎樣才能讓主線程等待? – wrongusername

+0

當文本在子窗口小部件(或其他可變更改)上更改時處理用戶數據。換句話說,將textChanged信號連接到您的處理函數。 – ccozad

+0

是的,但不幸的是,我的代碼目前運行在一個單獨的線程上,等待QDialog來完成'exec'。我認爲我最好的選擇是重構,以至於事情並非如此? – wrongusername

2

你需要讓你的QDialog無模式,通過調用show,而不是exec,並使用自定義的信號,而不是accept,因爲accept關閉窗口。您可以使用exec調用後的代碼將該信號連接到主窗口中的某個插槽。

如果還不是這種情況,應該在某個地方(作爲主窗口類中的成員或打開它的函數中的靜態變量)保留一個指向QDialog的引用/指針,以便能夠爲避免創建對話框的多個實例,並且您需要確保只連接一次信號/插槽。

相關問題