当我有一个带有网格布局的 QMainWindow 时,当用鼠标调整它的大小时,它不会低于其中所有控件正确显示所必需的最小尺寸。在我的应用程序中,我有时会以编程方式隐藏控件,但随后窗口保持相同大小,其余控件看起来散开,它们之间的空间太大。我最终手动调整了对话框的大小,所以它看起来并不难看。
在隐藏控件后手动调整大小时,我可以通过编程将对话框的垂直大小设置为最小吗?
当我有一个带有网格布局的 QMainWindow 时,当用鼠标调整它的大小时,它不会低于其中所有控件正确显示所必需的最小尺寸。在我的应用程序中,我有时会以编程方式隐藏控件,但随后窗口保持相同大小,其余控件看起来散开,它们之间的空间太大。我最终手动调整了对话框的大小,所以它看起来并不难看。
在隐藏控件后手动调整大小时,我可以通过编程将对话框的垂直大小设置为最小吗?
我发现调整大小然后调整本身的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 中还有其他小部件。根据Qt 文档中的这张图片,还有 Dock Widgets 和其他可能存在的东西。我只使用centralWidget
所以这个解决方案对我有用。
QLayout::SizeConstraint、QWidget::minimumSizeHint、QWidget::minimumSize之间存在层次结构,您可以在文档中找到它。
QWidget::minimumSize
默认情况下未设置。当它存在时,它占了上风
QWidget::minimumSizeHint
QWidget::minimumSizeHint
如果小部件不在布局中,则无效(意味着可以用鼠标将其大小调整为 0),否则使用布局定义的那个。QLayout::SizeConstraint
保存它*直接*管理的小部件的默认布局行为。如果您在 layout 中嵌套A
布局B
,则添加到的所有小部件都A
将使用其属性。此外,如果小部件定义W
了B
自己的布局,则此布局约束将应用于小部件W
。知道这一点,请按照以下步骤操作。它可能有效,我没有尝试:):
QLayout::SetDefaultConstraint
.这段代码可以解决问题(它只调整高度):
QWidget widget;
widget.resize(widget.width(), widget.minimumHeight());