Qt Creatorを使ってDesign -> SIGNALとSLOTの接続を行う
ダーツのプログラムをQtで実装するお話。
なんかテストプログラムができた。
というか、
- 作者: Jasmin Blanchette,Mark Summerfield,杵渕聡,杉田研治
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/11/27
- メディア: 大型本
- 購入: 1人 クリック: 104回
- この商品を含むブログ (20件) を見る
これは……なんだろう。前者は
↓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だぜ!!!!!!!!
はいはい虚しいだけ。