2012年5月24日木曜日

( Qt C++ )QMessageBoxに様々なボタンを配置する




はい。どうも。それでは真面目に粛々と表題の件やっていきます。

QMessageBoxの基本的な使い方は前の記事を参考にしてください。
再度説明はしません。今回は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);
    msgBox.exec();
}


はい簡単ですね。setStandardButtonsでそれぞれorでボタンを設定しています。setDefaultButtonによりSaveボタンを初期フォーカスを当てています。あとは前回と同じです。(ちなみにStandardButtonの種類は他にもあります。詳しくはコチラ
QMessageBoxリファレンスへ)


実行すると以下のようになります。
ボタンを押すと

以上です。次回はどのボタンが押されたかの識別についてやります。