QWidgetにオブジェクトを追加する

Qtは基本QWidget(とかQDialog、QMainWindow)をベースとして書くけど、あんまり違いとかわかんないからそのままQWidget使ってます。
とりあえずコード。めんどくさいので全部main.cppに自分は記述します。

#include "widget.h"
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QPushButton *button = new QPushButton("QUIT");
    QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()));
    QHBoxLayout *lay = new QHBoxLayout();
    lay->addWidget(button);
    w.setLayout(lay);
    w.show();

    return a.exec();
}

こんな感じ。上から大まかに説明します。
(いきなり重要)
Qt5使ってる人は

#include <QtWidgets>

これかなり重要です。なんかQt4の説明記事ばかりで毎度

#include <QtGui>

してください、とか書いてあるんですけど、Qt5から(あくまでも自分の環境では)
これインクルードしない限りお話にならない(オブジェクトとか色々まとめてやってくれる)ので、取り敢えずこれは忘れないこと。

ようやくコードの説明。
QPushButtonの宣言

QPushButton *button = new QPushButton("QUIT");

buttonという名のQPushButtonのオブジェクトを生成。
次はかなり重要なオブジェクトのSIGNAL, SLOTのお話。

QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()));

あんまり考えずにそのまま見た通り
buttonのclick受け取ったら、a(アプリケーション)をquit()させますよ、ってことです。
Qtは大体これつかって処理作ってるイメージです。

最後にタイトルの通り、QWidgetにオブジェクトを追加するやり方。

QHBoxLayout *lay = new QHBoxLayout();
lay->addWidget(button);
w.setLayout(lay);
w.show();

QHBoxLayoutとやらでレイアウト指定し、そのレイアウトにbuttonを追加。
widgetにレイアウトをセットしてw.show()で表示。

完成品がこれ
f:id:mahito6:20151227110557p:plain
ど真ん中にquitが来ててダサい。これ押したらそのままアプリケーション終了するので、まあ上手くはできたのかな。
とりあえず今回はここまで。


はあ、説明終わった。疲れた。説明になってないと思うけどゆるして。