我读到“首选策略是非常灵活的策略,小部件的大小可以小于或大于sizeHint()”
但是,当我增加或减少窗口的大小时,我找不到它们之间的任何差异
<;QSizePolicy.最小值>
from PySide2 import QtWidgets
app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
vMinimumButton = QtWidgets.QPushButton("h_Minimum, v_Fixed")
hMinimumButton = QtWidgets.QPushButton("h_Fixed, v_Minimum")
bMinimumButton = QtWidgets.QPushButton("h_Minimum, v_Minimum")
vMinimumButton.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
hMinimumButton.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
bMinimumButton.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
layout.addWidget(vMinimumButton)
layout.addWidget(hMinimumButton)
layout.addWidget(bMinimumButton)
window.setLayout(layout)
window.show()
app.exec_()
<;QSizePolicy.首选>
from PySide2 import QtWidgets
app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
vPreferredButton = QtWidgets.QPushButton("h_Preferred, v_Fixed")
hPreferredButton = QtWidgets.QPushButton("h_Fixed, v_Preferred")
bPreferredButton = QtWidgets.QPushButton("h_Preferred, v_Preferred")
vPreferredButton.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
hPreferredButton.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
bPreferredButton.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
layout.addWidget(vPreferredButton)
layout.addWidget(hPreferredButton)
layout.addWidget(bPreferredButton)
window.setLayout(layout)
window.show()
app.exec_()
除了简洁但完整的answer given by paxdiablo所提供的内容之外,我还想添加一些见解
首先,乍一看,Qt大小策略名称是违反直觉的。
理解它们需要仔细耐心地理解文档,可能还需要一些测试。一旦你了解了它的要点,你可能会意识到命名背后的逻辑和假设,而且它实际上是有意义的(非直觉的并不总是意味着错误的:复杂的主题需要更多的意识,以避免仅仅基于直觉的错误选择)
需要理解的重要一点是,它们总是引用小部件的大小提示,并指示如何将该提示用作引用
Maximum
表示提示将用作小部件的最大大小:它不能大于该大小。Minimum
意味着提示是最小的大小,因此它不能更小。记住
minimum*
和maximum*
(其中*
是Size
,Width
或Height
)覆盖了这些方面。Expanding
意味着提示是首选大小,如果还有一些空间,小部件将尝试使用它我们必须考虑QWIDGET也有一个^{} ,这是一个推荐的最小大小:如果它返回一个有效的大小,它可以不是更小(再一次,除非显式给出最小大小)。p>
我们还必须认识到,一些小部件具有特殊的行为,这也解释了为什么您在代码中看不到差异:例如,QPushButton返回
sizeHint()
,即使对于minimumSizeHint()
,它也基于其内容,并且仅对其宽度有效;默认情况下,Qt按钮具有固定高度一如既往,实验是理解行为的完美方式。
下面是一个基本的例子,可以更好地说明政策是如何运作的;使用基本QWidget作为基础可以避免由特定于小部件的提示和策略导致的意外行为
您可以使用上下文菜单设置策略,然后最终调整窗口大小以查看结果。显示的值显示当前策略和大小提示
Qt文档的policy section中介绍了这一点
“首选”政策允许从暗示的规模缩小和扩大控制。“最低”政策只允许增长
后者绝不能让你缩小到暗示的尺寸以下
这些策略是策略标志的不同组合,详细说明here:
QSizePolicy::GrowFlag = 1
:如果需要,小部件可以超出其大小提示李>QSizePolicy::ExpandFlag = 2
:小部件应该获得尽可能多的空间李>QSizePolicy::ShrinkFlag = 4
:如果需要,小部件可以缩小到其大小提示以下李>QSizePolicy::IgnoreFlag = 8
:小部件的大小提示被忽略。小部件将获得尽可能多的空间李>相关问题 更多 >
编程相关推荐