5

次のようなQtでプログラムを書いています:

画面キャプチャ

メイン ウィンドウは、Window : QWidget私が定義したクラスです。基本的QGridLayoutに 1 行 3 列の があります。ご覧のとおり、最初の列にはメニュー (クラスMenu :QWidget) が含まれ、2 番目と 3 番目の列にはそれぞれキャンバス (Canvas : QWidget私が定義したクラス) が含まれています。

サイズがどのように機能するかを理解するのに本当に苦労しています。これまでのところ、メニューの幅を修正するために (ウィンドウのレイアウトで) 最初の列の幅の最小サイズを定義しCanvas、そのコンストラクターで固定サイズを設定しました (このように: setFixedSize(QSize(size_in_pixels, size_in_pixels));)。

もちろん、問題は、ユーザーがウィンドウを再スケーリングすると、これがうまく動作しないことです。私がやりたいことは、キャンバスsizeHintsize_in_pixels(私の好みのサイズ)に設定することだと思いますが、これはほとんど不可能のようです。また、キャンバスの高さと幅を常に同じにしたいと考えています。Qt のドキュメントを読んで、いくつか試してみましたが、解決策が思いつきません。

あなたによれば、進むべき道は何ですか?あなたの洞察に感謝します。

4

1 に答える 1

9

Expandingキャンバス ウィジェットをサイズ ポリシーに設定するだけです。レイアウトのサイズが大きくなるにつれて、残りのスペースを均等に消費します。

PyQt4 で書かれた例を次に示します。

widget = QtGui.QWidget()
widget.resize(800,600)
layout = QtGui.QGridLayout(widget)

label = QtGui.QLabel("Menu")
label.setFrameStyle(label.Box)
label.setMinimumWidth(100)
layout.addWidget(label, 0, 0)

label = QtGui.QLabel("Canvas 1")
label.setFrameStyle(label.Box)
policy = QtGui.QSizePolicy(
    QtGui.QSizePolicy.Expanding, 
    QtGui.QSizePolicy.Expanding)
label.setSizePolicy(policy)
layout.addWidget(label, 0, 1)

label = QtGui.QLabel("Canvas 2")
label.setFrameStyle(label.Box)
layout.addWidget(label, 0, 2)
policy = QtGui.QSizePolicy(
    QtGui.QSizePolicy.Expanding, 
    QtGui.QSizePolicy.Expanding)
label.setSizePolicy(policy)

小さな

大きい

于 2012-09-10T18:47:25.887 に答える