トップ > はじめの一歩 > QMainWindowを使う

QMainWindowを使う

QMainWindowを使うことでメニューやツールバー、ステータスバーなどを簡単に追加できるようになります。
QMainWindowはウィンドウの中央に何かしらのWidgetを配置します。
今回もメモ帳を拡張していきますので、QTextEditを配置します。

このソースコードはQtのインストールディレクトリ以下の次の場所にあります。
Examples/Qt-5.5/widgets/tutorials/gettingStarted/gsQt/part4
プロジェクトファイルをQtCreatorで開いて実行すると、次のウィンドウが表示されます。



QMainWindowを継承したNotepadクラスの定義を見てみます。

cpp
#include <QtWidgets>

class Notepad : public QMainWindow
{
    Q_OBJECT

public:
    Notepad();

private slots:
    void load();
    void save();

private:
    QTextEdit *textEdit;

    QAction *loadAction;
    QAction *saveAction;
    QAction *exitAction;

    QMenu *fileMenu;
};

メモを開いたり保存したりできるようにload()とsave()の2つのスロットを選言しています。
load()とsave()の実装は次のセクションで行います。

メニューやツールバーを持ったアプリケーションでは、別々のWidigetが同じスロットを呼び出すことが多々あります。
例えば、メニューの「開く」とツールバーの「開くボタン」はファイルを開くためのスロットを使ったりします。
QActionで仲介させることで、これらのWidgetとスロットを簡単に接続できます。
例えば、QMenuとQToolBarはそれぞれメニューアイテムとツールボタンを同じQActionから作ることができます。

簡単に例を見ていきましょう。

cpp
Notepad::Notepad()
{
    loadAction = new QAction(tr("&Load"), this);
    saveAction = new QAction(tr("&Save"), this);
    exitAction = new QAction(tr("E&xit"), this);

    connect(loadAction, SIGNAL(triggered()), this, SLOT(load()));
    connect(saveAction, SIGNAL(triggered()), this, SLOT(save()));
    connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit()));

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(loadAction);
    fileMenu->addAction(saveAction);
    fileMenu->addSeparator();
    fileMenu->addAction(exitAction);

    textEdit = new QTextEdit;
    setCentralWidget(textEdit);

    setWindowTitle(tr("Notepad"));
}

前回と同じようにNotepadクラスのコンストラクタでGUIの設定を行っています。
QActionはWidgetに表示する文字列を引数にして生成します。
この場合はメニューアイテムなので文字列だけですが、ツールボタンなどのために、アイコンもコンストラクタ引数に設定できます。

これでメニューアイテムを選択するとアクションがトリガーとなってスロットが呼び出されるようになります。



前へ 次へ