QtDesinerでの作成そのニ


QtDesinerでパーツ配置して、プレビューしたのもの。

で、以下が本体のインターフェースとなるもの。
(ここでいうインターフェースは関数の仕様の意味)

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H

#include <QDialog>

#include "ui_gotocelldialog.h"

class GoToCellDialog : public QDialog ,private Ui::GoToCellDialog
{
  Q_OBJECT
public:
  GoToCellDialog(QWidget *parent=0); 
private slots:
  void on_lineEdit_textChanged();
};
#endif

class宣言な箇所では一番最後にセミコロンが必要!! ここ重要!!

#include <QtGui>
#include "gotocelldialog.h"

// コンストラクタ。受けとったparentをQDialogのparentに渡している。
GoToCellDialog::GoToCellDialog(QWidget *parent)
  : QDialog(parent)
{
  // Ui::GoToCellDialogで実装されているsetupUiが選択され、実行される。
  setupUi(this);
  // 正規表現クラス。perlと同じ書き方でほぼ行けるハズ。
  QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
  // thisを渡すことで、regExpの親オブジェクトを指定する => 親オブジェクトが破棄された時にいっしょに破棄される
  lineEdit->setValidator(new QRegExpValidator(regExp,this));
  
  // OKボタンのクリックイベントに対応するハンドラ関数の設定
  connect(
    okButton,SIGNAL(clicked()),
    this,SLOT(accept())
  );
  // 同じくcancelボタンのイベントハンドラ
  connect(
    cancelButton,SIGNAL(clicked()),
    this,SLOT(reject())
  );
}

// こちらは自動生成されたイベントハンドラの実装
// setupUiはon_オブジェクト名_シグナル名()という関数をそのシグナルが発生したときに呼び出されるように
// 自動生成しているらしい
void GoToCellDialog::on_lineEdit_textChanged()
{
  okButton->setEnabled(lineEdit->hasAcceptableInput());
}


今日は一日ずーっとclass宣言の最後のセミコロンが無いことではまってました。気づくの遅すぎ、、、