[英]How to disable user interaction in a Qt application when a DialogBox shown?
我有一個無模式QDialog框,在我的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實際上是非常hacky,並且可能容易出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.