Qt:QWidget 大小

5
我正在使用Qt编写一个应用程序,界面如下图所示:
主窗口是我定义的Window:QWidget类,它有一个QGridLayout,基本上有1行3列。正如你所看到的,第一列包含一个菜单(Menu:QWidget类),第二列和第三列各包含一个画布(Canvas:我也定义的QWidget类)。
我很难弄清楚尺寸是如何工作的。到目前为止,我只是在我的窗口布局中为第一列的宽度定义了最小值,以固定菜单的宽度,并在构造函数中为Canvas设置了一个固定大小(像这样:setFixedSize(QSize(size_in_pixels, size_in_pixels));)。
问题当然是,在用户重新调整窗口大小时,它表现得非常糟糕。我想做的是将Canvas的sizeHint设置为size_in_pixels(我首选的大小),但这似乎几乎不可能。我还希望我的Canvas始终具有相同的高度和宽度。我一直在阅读Qt文档并尝试着许多事情,但我无法找到解决方案。
请问,您认为应该怎么做?非常感谢您的建议。

我提交了一个答案...但是正如@karlphillip建议的那样,请请请接受一些您以前的答案。 - jdi
好的,我已经注意到了!我是这个网站的新手。jdi,非常感谢你的回答。我会在几分钟内告诉你它的工作情况。 - Seub
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)

small

larger


太好了,看起来我能用这个工作。非常感谢! - Seub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接