4

QMessageBox私のアプリケーションには、ユーザーが行ったすべての変更を破棄するか、編集を続けるかをユーザーに尋ねるダイアログがあります。このダイアログをアプリケーション全体に対してモーダルにしたい。

これが a の標準的な動作であることをどこかで読んだQMessageBoxので、次のように明示的に設定する必要はありません。

mbox.setWindowModality(Qt::ApplicationModal);

OS(私の場合はWindows 7)の他のモーダルダイアログとは異なる動作をするのはなぜだろうか。一方では、本来のように機能します。つまり、ユーザーがダイアログに応答するまで、アプリケーション内の他のすべての入力メソッドがブロックされます。ただし、ユーザーがアプリケーションの他のウィンドウをクリックしても「点滅」*しません。Qt をネイティブの Windows ダイアログのように動作させる方法はありますか?

前もって感謝します!


*この「点滅」の意味がわからない場合は、Windows OS でメモ帳を開き、テキストを入力して閉じてみてください。保存、破棄、または編集の続行を求めるダイアログが表示されます。ここで、エディタ ウィンドウのどこかをクリックします -> ダイアログの境界線とタイトルバーが数回点滅します。

4

2 に答える 2

7

この問題は、メッセージ ボックスに親がない場合に発生します。これは私にとってはうまくいきます:

QMessageBox box(this);
box.setStandardButtons(QMessageBox::Close);
box.exec();

しかし、これはしません:

QMessageBox box;
box.setStandardButtons(QMessageBox::Close);
box.exec();

これは理にかなっています...親がクリックされたことを認識しない限り、メッセージボックスは点滅できません。

于 2012-10-29T10:57:44.667 に答える
1

私の頭に浮かんだシンプルなソリューションです。アプリケーションをWindowsにのみ展開したい場合は、 MessageBoxA API#include <windows.h>を使用する必要があります。

それに加えて、これはWindowsとubuntuでうまく機能します

if (QMessageBox::question(this,"Close?","Close this dialog?",QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes)
{
    this->close();
}
于 2012-10-29T09:44:47.227 に答える