2011-06-17 30 views
2

我真的不知道如何制定我的問題這次...QMessageBox塊QDialog

我有我的應用程序與QDialog作爲主窗口。 應用程序從遠程機器獲取不同的值,如溫度,溼度等。

對於開發,我添加了一個包含不同小部件的組合框來模擬這些值。對於向用戶投擲警告和警報我有不同的限制。

例如,如果溫度超過30°C,然後打開QMessageBox,請求時間(應用程序在遠程計算機上進行輪詢)和當前溫度。所以這是更新每個請求週期。

我使用show()方法調出讓我的應用程序在後臺運行的消息框。現在的問題是:焦點在消息框,並且我的主窗口/ QDialog中的任何內容都不能被點擊,直到消息框未被接受/完成。

這就是我的問題:在模擬模式下,我想玩弄不同的溫度值,我可以通過主窗口中的滑塊進行調整。我如何訪問這些小部件/使消息框以某種方式「不阻塞」?

最好的問候,

馬蒂亞斯

回答

8

什麼您遇到被稱爲窗口的 「模式」。默認情況下,QMessageBox是「應用程序模式」。這意味着對所有其他應用程序窗口的輸入被阻止。

要更改模態,請在撥打show()之前使用setWindowModality(),其值爲Qt::WindowModality。你的情況:

box->setWindowModality(Qt::NonModal); 
box->show(); 
+0

完美,非常感謝你! :) – matthias 2011-06-17 09:25:54

0

你的確有一個模式消息框是QMessageBox提示是爲了工作的方式 - 即,用戶在被提醒和用戶界面是從進一步的交互保護,直到用戶已註冊的消息,關閉消息框,並在必要時採取任何必要的措施來回復消息。

現在,如果您將消息框模態設置爲Qt :: NonModal,(記住將它分配給一個變量,當您的應用程序在彈出消息框後繼續時不會超出範圍),您將能夠即使在顯示消息框的時候也會與用戶界面進行交互,我不得不說這是'不尋常的'。如果我理解了你的要求,你將已經有了消息框 - 然後當它仍然存在的時候,你會想要在主窗口中使用不同的臨時值 - 這是什麼效果?直到另一個消息對話框產生?消息框在某些時候將不得不被丟棄。

不僅如此,但是如果您顯示非模態消息框然後與主窗口進行交互,那麼您很可能只是讓消息框消失在主窗口後面,無論如何都是看不見的。

我建議消息框一般按照預期處理 - 僅爲臨時模態警報框,也許您需要在主窗口中清晰可見的實時報告/狀態區域,而不是使用非模態QMessageBox。

希望這有助於

問候

羅傑

+0

你好羅傑!謝謝您的回覆。你是對的。這絕對是'不尋常的'。我只想出於模擬原因訪問用戶界面:這意味着不從遠程機器讀取溫度/溼度/ ...,而是從滑塊獲取它,然後我想訪問它。儘管如此,用戶界面(我的QDialog)不允許太多的交互 - 它只顯示不同的值/只輸出。正如我所說,輸入僅用於模擬目的。 – matthias 2011-06-17 10:15:49