第1章ではボタンあるいはラベルがウィンドウに一つしか存在しませんでした。次にボタンを二つ並べて表示してみましょう。次のようなコードを書いたとします。app.exec();}このコードを実行すると、図2.1のようになります。Windows)本当はボタンが二つ並んで一つのウィンドウに収まってくれることを願っていましたが、これは予想外の結果です。この一つの部品を親としましょう。それではどのようにして複数のボタンを作ったらよいのでしょうか。その方法は、一つの親を作りその中にどんどん部品を追加していけばよいのです。この追加した部品を子とします。すれば、親の部品を表示することにより子も一緒に表示されます。この親となるのがMainWindowであり、その中にLayoutをセットします。品をどのように配置するかを管理するクラスです。基本的なLayoutの使い方¶Layoutにはいくつかの種類が存在します。良く使われるのが、QHBoxLayoutとQVBoxLayoutでしょう。あり、水平と垂直を意味しています。実際使ってみたほうがわかりやすいので、とりあえず使い方を見てみましょう。QHBoxLayoutに3つのボタンを追加し、そのLayoutをメインウィンドウに表示させてみましょう。app.exec();}3行目では<QHBoxLayout>をインクルードしています。QHBoxLayoutを使うには、このヘッダーファイルが必要です。8行目ではQWidgetクラスのwindowという変数を定義していますが、これがメインウィンドウ(親)となる変数です。この中にレイアウトをセットすることで複数の部品を表示することができます。14~16行目でボタンをレイアウトに追加しています。QHBoxLayoutはボタンを追加した順に水平に配置していきます。17行目でウィンドウにレイアウトをセットしています。実行した結果は図2.2のようになります。Windows)QHBoxLayoutをQVBoxLayoutに変えてみてください。した順に垂直に配置していきます。実行結果は図2.3となります。QGridLayout¶QGridLayoutは名前の通り格子状に部品を配置していくLayoutです。QGridLayoutに部品を追加する場合、QHBoxLayoutやQVBoxLayoutとは少し引数が違います。次のコードを見てください。app.exec();}このコードを実行すると、図2.4となります。Windows)addWidget関数が少し変わっています。addWidgetの第1引数はボタンを配置を開始する縦の位置、第2引数は横の位置を表しています。LayoutにLayoutを追加する(addLayout)¶addLayout関数を使いLayoutにLayoutを追加することもできます。次のコードを見てください。app.exec();}この例では、mainLayoutを作りその中に二つのレイアウトを縦に配置しています。実行結果は図2.6となります。メモリ管理について¶さて、ここまで部品をnewした場合deleteをしていませんでした。今までbuttonAやbuttonB等作ってきましたが、これを全部deleteするのはとても面倒なことです。実はこの事を心配する必要はありません。してくれる仕組みとなっています。よって必要なくなったら親のみdeleteすればよいでしょう。