2013-02-11 70 views
1

我有一個無模式的QDialog盒子,彈出錯誤/警告在我的Qt應用程序,我想強制用戶只專注於該對話框,並沒有點擊應用程序中的任何東西,直到他們點擊對話框上的確定。如何在顯示DialogBox時禁用Qt應用程序中的用戶交互?

我需要對話框保持無模式。隱藏主窗口或覆蓋它的解決方案是不可接受的。

目前我正在使用setModal(true);來解決我的問題。但我認爲這種方法可能會阻止主應用程序執行。

+1

那麼,這就是模式對話框,用於停止用戶與其他應用程序的交互。 – 2013-02-11 18:32:57

+0

@JoachimPileborg我有消息到達後臺,必須在應用程序到達時執行。 – andre 2013-02-11 18:34:06

+0

我想問題會更清楚,如果我問如何禁用鍵盤和鼠標輸入。 – andre 2013-02-11 18:41:23

回答

3

documentation

如果使用show()setModal(true)一起執行長 操作,必須在處理過程中調用QApplication::processEvents()定期 ,使用戶能夠與對話互動。

0

而不是使用QDialog框,請嘗試在代碼中使用qDebug語句或使用qInstallMsgHandler的日誌文件。

您還可以顯示一個QTextEdit並實時發佈您的日誌/錯誤消息。

http://qt-project.org/doc/qt-4.8/debug.html

http://qt-project.org/doc/qt-4.8/qdebug.html#details

http://qt-project.org/doc/qt-4.8/qtglobal.html#qInstallMsgHandler

http://qt-project.org/doc/qt-4.8/qtextedit.html#details

如果你還真想用錯誤一QDialog的盒子進行調試,在僞模式對話框而不是模式對話框,你可以嘗試使用eventFilters來防止鼠標和鍵盤事件到達任何其他窗口,但要讓異常最終結束纔會很棘手在QDialog,但它是可行的。

您也可以轉到接受鼠標和鍵盤輸入的一個或兩個小部件,並且如果QDialogBox可見,則忽略輸入。但是,這兩種顯示錯誤的方法,但是限制輸入而不使其成爲Modal是非常冒險的,並且可能會出錯。

+0

這不是用於調試應用程序的,它是用戶的消息框。 – andre 2013-02-11 19:02:03

相關問題