QT全般的な話です。
レイアウトをこういう風に配置したい
- 例えばQVBoxLayoutを1つ追加
- ウィンドウを常に覆うように表示
- レイアウトを自動リサイズさせたい
この汎用的なやり方を紹介します。
QtDesignerでの手順になります。
※ Python、C++、どの言語でも有効な方法
このページの目次
自分はQtでGUIソフトを作るのにPySideを使ってる
QtはC++・Pythonなどをサポートしてます。
僕が使ってるのは PySide ですね。
▼ 参考 : PySide+minicondaでGUIソフトを作ってみた
PyQtをやめたのはGPLライセンスだから
そして冒頭の問題に直面しました。
- ウインドウにQVBoxLayoutを1つ追加
- そのQVBoxLayoutを自動リサイズさせたい
- 設定できない。どうやればいいんだ…
ググればいいのに一人で悩んでしまった (-_-;)
StackOverFlowにレイアウトの答えが書いてあった
分からないことがあればググるのが鉄則
こういうキーワードでググってみました。
「QtDesigner layout auto expand」
するとズバリ答えが書いてるページを発見。
▼ こちらのStackOverFlowの回答
After creating your QVBoxLayout in Qt Designer, right-click on the background of your widget/dialog/window (not the QVBoxLayout, but the parent widget) and select Lay Out -> Lay Out in a Grid from the bottom of the context-menu. The QVBoxLayout should now stretch to fit the window and will resize automatically when the entire window is resized.
引用元 : https://stackoverflow.com/questions/3492739/auto-expanding-layout-with-qt-designer
▼ この回答の適当な日本語訳
例えばQVBoxLayoutをQt Designer上で配置したあと、widget/dialog/windowの背景(QVBoxLayoutそのものじゃないので注意。その親ウィジェット)で右クリックして レイアウト -> 格子状に並べる を選択します。QVBoxLayoutがウィンドウを覆うように配置されたはず。もちろんウィンドウの大きさが変わると、レイアウトも自動的にリサイズしてくれます。
この説明で分かるなら、これ以降を読む必要なし
ここではQVBoxLayoutを例に説明されてますね。
- QHBoxLayout
- QGridLayout
QFormLayout
もちろん以上のようなレイアウトでも有効です。
とにかくQtDesignerがある環境なら汎用的な方法
QtDesignerでレイアウトを自動リサイズさせる配置手順
ここではQVBoxLayoutを例に図解します。
まず以下のように配置されているとする
▼ ウィンドウに無作為にVBoxLayout配置
そしたらウィンドウの背景で右クリック。
メニューから レイアウト => 格子状に並べる(G)を選択
▼ レイアウト => 格子状に並べる(G)
▼ ウィンドウに対して自動リサイズされる
別に 格子状に並べる 以外の配置でも問題ないですが…
ここではグリッド上に並べることにしました。
ウィンドウをリサイズすると確かにレイアウトも自動リサイズしてくれます。これでレスポンシブなデザインが作りやすくなりました。
上記方法はC++版・Python版に関わらず有効な配置方法
以上の方法はPySide・PyQtに関係なく有効です。
もちろんC++版Qtでも同じような配置手順
以上、QTでのレイアウト自動配置でした。ではまた