首页 > 解决方案 > QSizePolicy.Minimum 和 QSizePolicy.Preferred 有什么区别?

问题描述

我读到“首选策略是非常灵活的策略,小部件的大小可以小于或大于 sizeHint()。”
但是当我增加或减少窗口的大小时,我找不到它们之间的任何差异。

< QSizePolicy.Minimum >

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.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_()

标签: pythonpyqtpysideqsizepolicy

解决方案


这在 Qt 文档的策略部分中有介绍。

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

后者永远不应该让你缩小到暗示的大小以下。

这些策略是策略标志的不同组合,详见此处

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

推荐阅读