Qt を使ってみる2回目
今回は新規プロジェクトを作成し、画面にラベルとボタンを置き、ボタンを押されたらラベルの表示を変えてみる。
まず、Vsiaul Studio 2010のメニューから
ファイル - 新規作成 - プロジェクト - Qt4 Projects - Qt Application
を選択。
名前は QtTest1 とした。

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

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

保存し、Qt Designer を閉じる。
pushButton1 が押されたら label1 に「Hello World」と表示するためには、qttest1.h を以下のように編集する。 「public slots:」を使い、「on_pushButton1_clicked」という名前にしておくことによって、自動的にボタンが押されたときの処理となるようだ。
別の名前を使う場合は「QObject::connect」を使って、自分でイベントを接続してやる必要がある。
qttest1.h で以下のようにメソッド名を変えたとすると、これだけでイベントは処理されなくなってしまう。
この場合は QObject::connect を使って SIGNAL と SLOT を結びつける必要があるようだ。
たとえば qttest1.cpp のコントラクタなどで QObject::connect を使って関連づけておく。
以上です。
今回は新規プロジェクトを作成し、画面にラベルとボタンを置き、ボタンを押されたらラベルの表示を変えてみる。
まず、Vsiaul Studio 2010のメニューから
ファイル - 新規作成 - プロジェクト - Qt4 Projects - Qt Application
を選択。
名前は QtTest1 とした。

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

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

保存し、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() { }
以上です。