我有一個無模式的QDialog盒子,彈出錯誤/警告在我的Qt應用程序,我想強制用戶只專注於該對話框,並沒有點擊應用程序中的任何東西,直到他們點擊對話框上的確定。如何在顯示DialogBox時禁用Qt應用程序中的用戶交互?
我需要對話框保持無模式。隱藏主窗口或覆蓋它的解決方案是不可接受的。
目前我正在使用setModal(true);
來解決我的問題。但我認爲這種方法可能會阻止主應用程序執行。
我有一個無模式的QDialog盒子,彈出錯誤/警告在我的Qt應用程序,我想強制用戶只專注於該對話框,並沒有點擊應用程序中的任何東西,直到他們點擊對話框上的確定。如何在顯示DialogBox時禁用Qt應用程序中的用戶交互?
我需要對話框保持無模式。隱藏主窗口或覆蓋它的解決方案是不可接受的。
目前我正在使用setModal(true);
來解決我的問題。但我認爲這種方法可能會阻止主應用程序執行。
如果使用
show()
和setModal(true)
一起執行長 操作,必須在處理過程中調用QApplication::processEvents()
定期 ,使用戶能夠與對話互動。
而不是使用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是非常冒險的,並且可能會出錯。
這不是用於調試應用程序的,它是用戶的消息框。 – andre 2013-02-11 19:02:03
那麼,這就是模式對話框,用於停止用戶與其他應用程序的交互。 – 2013-02-11 18:32:57
@JoachimPileborg我有消息到達後臺,必須在應用程序到達時執行。 – andre 2013-02-11 18:34:06
我想問題會更清楚,如果我問如何禁用鍵盤和鼠標輸入。 – andre 2013-02-11 18:41:23