QSizePolicy.Minimum 和 QSizePolicy.Preferred 之间有什么区别?

fri*_*tos 2 python pyqt pyside qsizepolicy

我读到“首选策略是非常灵活的策略,小部件的大小可以比 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_()
Run Code Online (Sandbox Code Playgroud)

<QSizePolicy.Preferred>

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_()
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 5

Qt 文档的策略部分对此进行了介绍。

“首选”策略允许从暗示的大小缩小和增大控制。“最低”政策只允许增长。

后者永远不会让你缩小到低于暗示的尺寸。

这些策略是策略标志的不同组合,详细信息如下

  • QSizePolicy::GrowFlag = 1:如果需要,小部件可以超出其大小提示。
  • QSizePolicy::ExpandFlag = 2:小部件应该获得尽可能多的空间。
  • QSizePolicy::ShrinkFlag = 4:如有必要,小部件可以缩小到其大小提示以下。
  • QSizePolicy::IgnoreFlag = 8:忽略小部件的大小提示。小部件将获得尽可能多的空间。