Qt を使ってみる2回目
今回は新規プロジェクトを作成し、画面にラベルとボタンを置き、ボタンを押されたらラベルの表示を変えてみる。

まず、Vsiaul Studio 2010のメニューから
    ファイル - 新規作成 - プロジェクト - Qt4 Projects - Qt Application
を選択。
名前は QtTest1 とした。
qt6

OKを押すと Qt GUI Projects Wizard が立ち上がった。とくに変更しない。このまま Finish。
qt7

Form Files の qttest1.ui をダブルクリックすると Qt Designer が立ち上がるので、Label と Push Button をフォームにドロップする。
ドロップしたら、右側のプロパティウィンドウにある ObjectNameプロパティを label1、pushButton1 と変更しておく。
qt10

保存し、Qt Designer を閉じる。

pushButton1 が押されたら label1 に「Hello World」と表示するためには、qttest1.h を以下のように編集する。 「public slots:」を使い、「on_pushButton1_clicked」という名前にしておくことによって、自動的にボタンが押されたときの処理となるようだ。
#ifndef QTTEST1_H
#define QTTEST1_H

#include 
#include "ui_qttest1.h"

class QtTest1 : public QMainWindow
{
	Q_OBJECT

public:
	QtTest1(QWidget *parent = 0, Qt::WFlags flags = 0);
	~QtTest1();

private:
	Ui::QtTest1Class ui;

public slots:
    void on_pushButton1_clicked() {
        ui.label1->setText("Hello World");
    }
};

#endif // QTTEST1_H


別の名前を使う場合は「QObject::connect」を使って、自分でイベントを接続してやる必要がある。
qttest1.h で以下のようにメソッド名を変えたとすると、これだけでイベントは処理されなくなってしまう。
#ifndef QTTEST1_H
#define QTTEST1_H

#include 
#include "ui_qttest1.h"

class QtTest1 : public QMainWindow
{
	Q_OBJECT

public:
	QtTest1(QWidget *parent = 0, Qt::WFlags flags = 0);
	~QtTest1();

private:
	Ui::QtTest1Class ui;

public slots:
    void onPushButton1Clicked() {
        ui.label1->setText("Hello World");
    }
};

#endif // QTTEST1_H

この場合は QObject::connect を使って SIGNAL と SLOT を結びつける必要があるようだ。
たとえば qttest1.cpp のコントラクタなどで QObject::connect を使って関連づけておく。
#include "qttest1.h"

QtTest1::QtTest1(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
	ui.setupUi(this);

	QObject::connect(ui.pushButton1, SIGNAL(clicked()), this, SLOT(onClickPushButton1()));
}

QtTest1::~QtTest1()
{

}

以上です。