Qt Creatorを使ってDesign -> SIGNALとSLOTの接続を行う

ダーツのプログラムをQtで実装するお話。
なんかテストプログラムができた。
というか、

入門 Qt 4 プログラミング

入門 Qt 4 プログラミング

↑この本の手順と、俺のPCのQt Creator 1.3.1内蔵のDesignerが作るheaderファイルが微妙に違って困った。
これは……なんだろう。前者は
↓headerファイル

 (snip)

#include <QDialog>

#include "ui_gotocelldialog.h"

class GoToCellDialog : public QDialog, private Ui::GoToCellDialog
{
    Q_OBJECT
public:
    GoToCellDialog(QWidget *parent = 0);

 (snip)

↓実装ファイル

#include <QtGui>

#include "ui_gotocelldialog.h"

GoToCellDialog::GoToCellDialog(QWidget *parent) : QDialog(parent)
{
    setupUi(this);

 (snip)

}

 (snip)


俺がQt Creatorに作ってもらったheaderファイルは、作るものが違うけどこんな感じ。

#ifndef DISPLAYTEST_HPP
#define DISPLAYTEST_HPP

#include <QWidget>

namespace Ui {
    class Displaytest;
}

class Displaytest : public QWidget {
    Q_OBJECT
public:
    Displaytest(QWidget *parent = 0);
    ~Displaytest();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::Displaytest *ui;
};

#endif // DISPLAYTEST_HPP

↓実装ファイル

#include "displaytest.hpp"
#include "ui_displaytest.h"

Displaytest::Displaytest(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Displaytest)
{
    ui->setupUi(this);
}

Displaytest::~Displaytest()
{
    delete ui;
}

void Displaytest::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

headerで継承せず、コンストラクタのところでゴニョゴニョしてるのは分かる。そういや前者(本の例の方)はコンストラクタもデストラクタも宣言・定義してないけどいいんかね。
しかし名前空間の話とか全く知らないから、Uiとか何をやってるのかさっぱり。


結局実装は、headerでprivate slotsを宣言し、その中で表示ディスプレイの値にボタンの値をインクリメントする関数を書いて、コンストラクタの中でボタンのSIGNALと繋げてやったらできた。

 (snip)

private slots:
    void increment();

 (snip)
 (snip)

Displaytest::Displaytest(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Displaytest)
{
    ui->setupUi(this);
    connect(ui->SBULL, SIGNAL(clicked()), this, SLOT(increment()));
}

 (snip)

void Displaytest::increment()
{
    int const get_pt = 50;
    int tempvalue = ui->displaypoints->intValue();
    ui->displaypoints->display(tempvalue + get_pt);
}

まだBULLボタンだけだができた。
一つできれば、愚直にコピペでも全部できるのさ!
C++らしく、格好良くかつ楽な実装をしたいところだが。




HAT TRICKだぜ!!!!!!!!
はいはい虚しいだけ。