はじめに
前回は,
レイアウトマネージメントとは
表1のように,
表1 ウィジェットの種類
種類 | 説明 |
---|---|
コンポジットウィジェット | ウィジェットを配置して作成するウィジェット |
グラフィカルウィジェット | アナログ時計やVUメーターのようなウィジェット |
グラフィカルウィジェットは,
表2 ウィジェットの配置方法
方法 | 説明 |
---|---|
位置とサイズ指定 | ウィジェットの絶対位置とサイズを指定して並べる機能。どのGUIツールキットも必ず持っているウィジェット配置機能。 |
レイアウトマネージメント | ウィジェットの相対関係を指定してウィジェットを並べたり, |
位置とサイズは,
- 日本語や英語などの言語の変更
- ウィンドウサイズの変更
- フォントの種類やフォントサイズの変更
そこで,
Qtのレイアウトポリシー
Qtでは,
表3 Qtのレイアウトクラス
レイアウトクラス | 説明 |
---|---|
QBoxLayout | 縦(上から下, |
QHBoxLayout | QBoxLayoutを継承し, |
QVBoxLayout | QBoxLayoutを継承し, |
QGridLayout | 格子状に並べる。 |
QFormLayout | n行2列に並べる。ラベル付きで入力ウィジェットを並べることに特化。Qt 4. |
QStackedLayout | 前後に重ね合わせて, |
いろいろありますが,
レイアウトマネージャは,
レイアウトの作成方法
ベースのウィジェット上にウィジェットを配置するには,
リスト1 トップダウンなレイアウト
QVBoxLayout* topLayout = new QVBoxLayout(this);
QLabel* messageLabel = new QLabel(this);
topLayout->addWidget(messageLabel);
QPushButton* okButton = new QPushButton("Ok", this);
QPushButton* cancelButton = new QPushButton("Cancel", this);
QHBoxLayout* buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(okButton);
buttonLayout->addWidget(cancelButton);
topLayout->addLayout(buttonLayout);
リスト2は,
リスト2 ボトムアップなレイアウト
QLabel* messageLabel = new QLabel(this);
QPushButton* okButton = new QPushButton("Ok");
QPushButton* cancelButton = new QPushButton("Cancel");
QHBoxLayout* buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(okButton);
buttonLayout->addWidget(cancelButton);
QVBoxLayout* topLayout = new QVBoxLayout;
topLayout->addWidget(messageLabel);
topLayout->addLayout(buttonLayout);
setLayout(topLayout);