簡體   English   中英

如何在顯示DialogBox時禁用Qt應用程序中的用戶交互?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM