当我有一个带有网格布局的QMainWindow时,当用鼠标调整它的大小时,它将不会低于其中所有控件正确显示所需的最小尺寸。在我的应用程序中,我有时以编程方式隐藏控件,但随后窗口保持相同的大小,其余控件看起来分散,它们之间的空间太大。我最终手动调整对话框的大小,因此看起来并不难看。
我可以以编程方式将对话框的垂直大小设置为我在隐藏控件后手动调整大小时得到的最小值吗?
答案 0 :(得分:2)
我发现调整centralWidget
中QMainWindow
的大小,然后调整QMainWindow
本身的大小就可以了。换句话说:
from PyQt4 import QtGui
class MyMainWindow(QtGui.QMainWindow):
def __init__(self):
# define some widgets and stuff
def whenWidgetsAreHidden(self):
# this method should be triggered when you hide your widgets
self.centralWidget.adjustSize()
self.adjustSize()
请注意,QMainWindowLayout中还有其他小部件。根据{{3}}的这张图片,还有Dock Widgets和其他可能存在的东西。我只使用centralWidget
,所以这个解决方案对我有用。
答案 1 :(得分:1)
QLayout::SizeConstraint,QWidget::minimumSizeHint,QWidget::minimumSize之间存在层次结构,您可以在文档中找到它。
QWidget::minimumSize
。如果是的话,它就会胜过
QWidget::minimumSizeHint
QWidget::minimumSizeHint
无效(意味着可以使用鼠标将其调整为0),否则使用布局定义的窗口小部件。QLayout::SizeConstraint
保存*直接*管理的小部件的默认布局行为。如果在布局A
中嵌套布局B
,则添加到A
的所有窗口小部件都将使用其属性。此外,如果W
中的小部件B
定义了自己的布局,则此布局约束是应用于小部件W
的布局约束。知道这一点,请按照以下步骤操作。 可能工作,我没试过:):
QLayout::SetDefaultConstraint
。答案 2 :(得分:0)
这段代码可以解决问题(它只调整高度):
QWidget widget;
widget.resize(widget.width(), widget.minimumHeight());