3

今回は質問の仕方がよくわかりません…

QDialog をメイン ウィンドウとして使用するアプリケーションがあります。アプリケーションは、リモート マシンから温度、湿度などのさまざまな値を取得しています。

開発のために、これらの値をシミュレートするために、さまざまなウィジェットを含むグループ ボックスを追加しました。ユーザーへの警告とアラームのスローにはさまざまな制限があります。

たとえば、温度が 30°C を超えた場合は、要求時間 (アプリケーションがリモート マシンでポーリングを行う) と現在の温度で QMessageBox を開きます。したがって、これはリクエスト サイクルごとに更新されます。

show() メソッドを使用して、アプリケーションをバックグラウンドで実行し続けるメッセージ ボックスを表示します。現在の問題は次のとおりです。フォーカスがメッセージ ボックスにあり、メイン ウィンドウには何もありません。メッセージ ボックスが受け入れられないか終了するまで、QDialog をクリックすることはできません。

それが私の問題です。シミュレーション モードでは、メイン ウィンドウのスライダーで調整できるさまざまな温度値を試してみたいと思います。これらのウィジェットにアクセスするにはどうすればよいですか / メッセージボックスを何らかの方法で「ブロックしない」ようにしますか?

よろしくお願いします、

マティアス

4

2 に答える 2

8

あなたが経験しているのは、ウィンドウの「モダリティ」と呼ばれています。デフォルトでは、aQMessageBoxは「アプリケーションモーダル」です。これは、他のすべてのアプリケーションウィンドウへの入力がブロックされることを意味します。

モダリティを変更するには、を呼び出す直前にQt :: WindowModalityの値でsetWindowModality()を使用します。あなたの場合:show()

box->setWindowModality(Qt::NonModal);
box->show();
于 2011-06-17T09:14:35.020 に答える
0

実際、QMessageBox が動作するように意図された方法であるモーダル メッセージ ボックスがあります。つまり、ユーザーは警告を受け、ユーザーがメッセージを登録し、メッセージ ボックスを閉じ、(必要に応じて) 取得するまで、UI はそれ以上の対話から保護されます。メッセージに応じて必要なアクション。

メッセージ ボックスのモダリティを Qt::NonModal に設定すると (メッセージ ボックスのポップアップ後にアプリケーションが続行するときに範囲外にならない変数に割り当てることを忘れないでください)、UI を操作できるようになります。メッセージボックスが表示されている間でも、私が言わなければならないのは「異常」です。私があなたの要件を理解している場合、メッセージ ボックスは既に表示されています。これがまだ表示されている間に、メイン ウィンドウでさまざまな一時値を試してみてください。どのような影響がありますか? 別のメッセージ ダイアログ ボックスが表示されるまで? メッセージ ボックスは、いずれ破棄する必要があります。

それだけでなく、非モーダル メッセージ ボックスを表示してからメイン ウィンドウを操作すると、メッセージ ボックスがメイン ウィンドウの背後に消えて見えなくなる可能性が非常に高くなります。

メッセージ ボックスは一般的に意図したとおりに処理することをお勧めします。一時的で一時的なモーダル アラート ボックスのみであり、非モーダル QMessageBox を使用するのではなく、メイン ウィンドウにはっきりと見えるライブ レポート/ステータス エリアが必要になる場合があります。

お役に立てれば

よろしく

ロジャー

于 2011-06-17T09:49:58.263 に答える