124

Qt で Yes/No ボタンのあるメッセージ ボックスを表示するにはどうすればよいですか? また、どのボタンが押されたかを確認するにはどうすればよいですか?

つまり、次のようなメッセージ ボックスです。

ここに画像の説明を入力

4

7 に答える 7

204

あなたはQMessageBox::questionそのために使うでしょう。

架空のウィジェットのスロットでの例:

#include <QApplication>
#include <QMessageBox>
#include <QDebug>

// ...

void MyWidget::someSlot() {
  QMessageBox::StandardButton reply;
  reply = QMessageBox::question(this, "Test", "Quit?",
                                QMessageBox::Yes|QMessageBox::No);
  if (reply == QMessageBox::Yes) {
    qDebug() << "Yes was clicked";
    QApplication::quit();
  } else {
    qDebug() << "Yes was *not* clicked";
  }
}

Qt 4 および 5 で動作し、出力を表示するQT += widgetsには Qt 5 およびCONFIG += consoleWin32が必要です。qDebug()

列挙型を参照して、StandardButton使用できるボタンのリストを取得してください。この関数は、クリックされたボタンを返します。追加の引数を使用してデフォルト ボタンを設定できます (指定しない場合、または指定しない場合、 Qt は「適切なデフォルトを自動的に選択しますQMessageBox::NoButton」 )。

于 2012-10-28T18:35:08.813 に答える
44

QMessage オブジェクトを使用してメッセージ ボックスを作成し、ボタンを追加できます。

QMessageBox msgBox;
msgBox.setWindowTitle("title");
msgBox.setText("Question");
msgBox.setStandardButtons(QMessageBox::Yes);
msgBox.addButton(QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
if(msgBox.exec() == QMessageBox::Yes){
  // do something
}else {
  // do something else
}
于 2012-10-28T18:32:09.913 に答える
21

QT は Windows と同じくらいシンプルです。同等のコードは

if (QMessageBox::Yes == QMessageBox(QMessageBox::Information, "title", "Question", QMessageBox::Yes|QMessageBox::No).exec()) 
{

}
于 2013-11-02T19:22:50.580 に答える
4

QMessageBoxそのような質問をすばやく行うための静的メソッドが含まれています。

#include <QApplication>
#include <QMessageBox>

int main(int argc, char **argv)
{
    QApplication app{argc, argv};
    while (QMessageBox::question(nullptr,
                                 qApp->translate("my_app", "Test"),
                                 qApp->translate("my_app", "Are you sure you want to quit?"),
                                 QMessageBox::Yes|QMessageBox::No)
           != QMessageBox::Yes)
        // ask again
        ;
}

ニーズが静的メソッドで提供されるものよりも複雑な場合は、新しいQMessageBoxオブジェクトを作成し、そのメソッドを呼び出してexec()独自のイベント ループで表示し、押されたボタンの識別子を取得する必要があります。たとえば、「いいえ」をデフォルトの回答にしたい場合があります。

#include <QApplication>
#include <QMessageBox>

int main(int argc, char **argv)
{
    QApplication app{argc, argv};
    auto question = new QMessageBox(QMessageBox::Question,
                                    qApp->translate("my_app", "Test"),
                                    qApp->translate("my_app", "Are you sure you want to quit?"),
                                    QMessageBox::Yes|QMessageBox::No,
                                    nullptr);
    question->setDefaultButton(QMessageBox::No);

    while (question->exec() != QMessageBox::Yes)
        // ask again
        ;
}
于 2017-03-14T17:44:54.713 に答える
2

質問と [はい] ボタンと[いいえ] ボタンで構成される QMessageBox のPython同等コード。[はい] ボタンをクリックすると、[はい] をクリックしたことを示す別のメッセージ ボックスがポップアップ表示され、[いいえ] ボタンの場合も同様です。if ブロックの後に独自のコードをプッシュできます。

button_reply = QMessageBox.question(self,"Test", "Are you sure want to quit??", QMessageBox.Yes,QMessageBox.No,)

if button_reply == QMessageBox.Yes:
    QMessageBox.information(self, "Test", "Yes Button Was Clicked")
else :
    QMessageBox.information(self, "Test", "No Button Was Clicked")

于 2020-11-28T11:25:09.483 に答える
-2

Python で作成する場合は、ワークベンチでこのコードを確認する必要があります。このようにも書きます。Pythonでポップアップボックスを作成しました。

msgBox = QMessageBox()
msgBox.setText("The document has been modified.")
msgBox.setInformativeText("Do you want to save your changes?")
msgBox.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
msgBox.setDefaultButton(QMessageBox.Save)
ret = msgBox.exec_()
于 2018-08-23T15:02:22.100 に答える