2012-09-10 113 views
4

我写了Qt的程序是这样的:Qt的:QWidget的大小

screen capture

主窗口是一类Window : QWidget我已经定义了。它有一个QGridLayout,它基本上有1行和3列。正如你所看到的,第一列包含一个菜单(这是一个类Menu :QWidget),第二和第三列各包含一个画布(我也定义了一个类Canvas : QWidget)。

我很难找出尺寸是如何工作的。到目前为止,我已经为第一列的宽度(在我的窗口的布局中)定义了一个最小尺寸来修复菜单的宽度,并且我在其构造函数中为Canvas设置了一个固定尺寸(如:setFixedSize(QSize(size_in_pixels, size_in_pixels));)。

问题是,当用户重新调整窗口的大小时,这种行为会非常糟糕。我想我想要做的是将我的画布的sizeHint设置为size_in_pixels(我的首选尺寸),但这似乎很难。我也希望我的画布在任何时候都有相同的高度和宽度。我一直在阅读Qt文档并尝试了几件事,但我无法想出一个解决方案。

根据你的要走的路是什么?非常感谢您的见解。

+0

我提交了一个答案......但作为@karlphillip建议,请请请接受一些你以前的答案。 – jdi

+0

请注意!我是这个网站的新手。 jdi,非常感谢你的回答。我会告诉你它是如何在一瞬间完成的。 – Seub

回答

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

+0

这很好,看起来我可以用这个工作。非常感谢! – Seub