5

我正在用 Qt 编写一个程序,如下所示:

屏幕截图

主窗口是Window : QWidget我定义的一个类。它有一个QGridLayout基本上有 1 行和 3 列的。如您所见,第一列包含一个菜单(这是一个类Menu :QWidget),第二列和第三列各包含一个画布(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 回答