はじめに
前回は,
オブジェクトモデル
Qtのオブジェクトモデルでは,
表1 オブジェクトモデルで拡張された機能
シグナルとスロット | タイプセーフコールバック, |
---|---|
オブジェクトプロパティ | 問い合わせ可能なプロパティ |
イベントとイベントフィルター | イベント処理とイベントフック |
国際化用テキスト文字列の翻訳 | クラスをコンテキストとするテキスト文字列翻訳 |
インターバルタイマー | イベント処理と統合されたタイマー |
オブジェクトツリー | オブジェクトの階層化と検索 |
ガーディドポインター | QPointer。Qt 4. |
ダイナミックキャスト | ライブラリ境界制限のないダイナミックキャスト |
これらの機能は,
オブジェクトツリー
図1のように,
- ウィジエットがどのウィジェット上に置かれているか
- ウィジェットをどのように並べるか
- ウィジェットの表示/
非表示の制御 - ウィジェットの有効化/
無効化の制御 - ウィジェットのメモリ割り当てと解放の制御
Qtでは,
図1のコンポジットウィジェットのオブジェクトツリーは,
QFrameとQGroupBoxの親オブジェクトはQWidget,
ウィジェットの親子関係に着目したコードはリスト1のようになります。
リスト1 ウィジェットの親子関係
class ColorChooser : public QWidget
{
...
private:
QFrame* colorFrame;
QSlider* redSlider;
QSlider* greenSlider;
QSlider* blueSlider;
}
ColorChooser::ColorChooser( QWidget* parent )
: QWidget( parent )
{
...
colorFrame = new QFrame(this);
QGroupBox* colorGroupBox = new QGroupBox("RGB", this);
QLabel* redLabel = new QLabel("&Red", groupBox);
QLabel* greenLabel = new QLabel("&Green", groupBox);
QLabel* blueLabel = new QLabel("&Blue", groupBox);
redSlider = new QSlider(Qt::Horizontal, colorGroupBox);
greenSlider = new QSlider(Qt::Horizontal, colorGroupBox);
blueSlider = new QSlider(Qt::Horizontal, colorGroupBox);
...
}
ColorChooser::~ColorChooser()
{
// 子ウィジェットのメモリ解放は不要。
}
ウィジェットのインスタンス生成時に親ウィジェットを指定しているのがポイントです。QObject またはその継承クラスのインスタンス生成では,