それでは表題の件をいつもどおり真面目に粛々と書いていきます。
「QMessageBoxに様々なボタンを配置する」の記事で様々なボタンを配置することはできるようになりました。今日はその配置したボタンを識別するということをやっていきます。
いつものようにQtCreaterの使用を前提とします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
またMainWindowにはbottonを一つ配置済みとします。
ではコードを
(mainwindow.h)
#include <QMainWindow> #include <QMessageBox> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked();//コネクトしません。 private: Ui::MainWindow *ui; };
特に難しいところはありません。<QMessageBox>は必ずインクルードしておいてください。
on_pushButton_clicked()はプッシュボタンクリックシグナルを補足します。Connectはしていませんがこれで動作します。(これがわからない方は”Qtをはじめよう"の「第16回:GUI デザイナ上でスロットを...」の記事の説明を見てください。)
(mainwindow.cpp)
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QMessageBox msgBox; msgBox.setText("Hello World!! This is MessageBox!!"); msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Save); int ret = msgBox.exec();//結果がretに格納される QMessageBox msgBox2; switch (ret) { case QMessageBox::Save://save押されたら msgBox2.setText( "Save was clicked" ); msgBox2.exec(); break; case QMessageBox::Discard://discard押されたら msgBox2.setText( "Don't Save was clicked" ); msgBox2.exec(); break; case QMessageBox::Cancel://キャンセル押されたら msgBox2.setText( "Cancel was clicked" ); msgBox2.exec(); break; default: // 来ないけど一応。 break; } }
はい簡単ですね。見てのとおりです。msgBoxへのボタン設定などは以前の記事を参照してください。 msgBox.exec()は実行すると戻り値が返りまず。その値を調べることによってどのボタンが押されたかを識別できます。 今回はretに代入し、それをswitch分岐させて押されたボタンについての情報をメッセージとして更に表示しています。 識別用のQMessageBox::Cancelなどのフラグは他にもありますので詳しくはリファレンスを見てください。
(QMessageBoxリファレンスへ)
実行すると以下のようになります。
ためしにSaveボタンを押すと
のようになります。
以上です。