メモ帳に終了ボタンを付ける
実際のアプリケーションではいくつかのWidgetを使うことになると思います。
ここではQPushButtonについて見ていきます。
このソースコードはQtのインストールディレクトリ以下の次の場所にあります。
Examples/Qt-5.5/widgets/tutorials/gettingStarted/gsQt/part2
プロジェクトファイルをQtCreatorで開いて実行すると、次のウィンドウが表示されます。
テキストエディターの下に終了ボタンがあり、このボタンを押すとメモ帳が終了します。
実装を見てみましょう。
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextEdit *textEdit = new QTextEdit;
QPushButton *quitButton = new QPushButton("&Quit");
QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(textEdit);
layout->addWidget(quitButton);
QWidget window;
window.setLayout(layout);
window.show();
return app.exec();
}
1行目でQtWidgetsをインクルードしています。
QtWidgetsをインクルードすると、デスクトップスタイルのUI要素(例えばボタンやチェックボックス、スクロールバーなど)のクラスを一度にインクルードできます。
10行目ではQtのシグナルとスロットの仕組みを利用して、終了ボタンが押されたらアプリを終了させています。
シグナルでメッセージを送信して、スロットでそれを受け取ります。
シグナルとスロットはconnect()で結びつけます。
connectは引数にそれぞれシグナルとスロットのオブジェクトへのポインタと関数名のセットを取り、それらを接続します。
この例ではclicked()がシグナルで、quit()がスロットです。
12行目ではQVBoxLayoutを生成しています。
WidgetはWidgetのコンテナになることができ、子Widgetの位置やサイズを設定することもできますが、レイアウトを使った方が簡単です。
レイアウトを使うとWidgetの位置やサイズを管理できます。
ここで使っているQVBoxLayoutはWidgetを垂直方向にレイアウトします。
13行目と14行目ではテキストエディターと終了ボタンをレイアウトに設定しています。
17行目ではQWidgetにレイアウトを設定し、19行目で表示をしています。