我有一个QDialog子类,包含我的应用程序的一些选项.有些选项是核心的,另一些是高级的,所以我决定将它们放入separeted可检查的QGroupBox中.

当用户选中高级选项框时,我希望我的对话框缩小垂直,但我找不到正确的方法 - 对话框大小保持不变

我将对话框的大小策略设置为Expanding,尝试调用adjustSize()并尝试调用resize()方法 - 没有任何帮助.我无法将programmaticaly对话框调整为小于当前大小(它只能变大).同时,可以手动调整大小.

有谁能够帮我?
主要问题
如果有额外的或没有足够的空间来容纳它们,那么为您的小部件提供默认大小并确保它们收缩、扩展或保持固定的“正确”方法是什么?
我认为 Qt 是如何工作的
阅读 Qt 文档后,大小调整算法似乎是这样的......布局首先通过 QWidget::sizeHint 方法询问其子级的理想大小。如果布局有额外空间或空间不足,那么它将根据每个小部件的大小策略(QWidget::sizePolicy)、最小大小(QWidget::minimumSize)和最大大小(QWidget::maximumSize)确定要调整哪些小部件的大小。
为什么没有 QWidget::setSizeHint 方法?
如果我的理解接近准确,那么似乎您所要做的就是在每个小部件上设置 sizeHint、sizePolicy、maximumSize 和 minusSize,一切都会正常工作。那么为什么没有 setSizeHint 方法呢?!?!?!!当然,每次您使用一个提供您需要的所有功能的小部件(QTableView、QComboBox 等)时,您都可以扩展它并覆盖单个方法,但这听起来绝对荒谬。
我正在努力解决的尺寸问题之一。
我有一个 QMainWindow,左侧有一个 QDockWidget。QDockWidget 有一个 QTableView。我想让 QDockWidget/QTableView 在启动时占用“合理”的空间量,然后用户可以根据需要调整其大小。
不幸的是,当应用程序启动时,它为 QDockWidget/QTableView 提供的空间太小,以至于需要水平滚动条。我发现强制它提供合理宽度的唯一方法是设置 QDockWidget 的最小宽度,但它会阻止用户将其大小调整到他们想要的大小。
我有一个QLabel在QVBoxLayout. 大多数情况下,它只有一行文本,但有时,文本可能太长而无法容纳在一行中。所以我必须启用wordWrap.
我希望标签尽可能(垂直)小,因此我设置setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum).
现在,如果有足够的垂直空间,标签会更高,因为它必须只有一行:
在相同的窗口大小且未启用自动换行的情况下,标签仅占用我希望它占用的最小空间:
这也可以通过启用 wordWrap 并且独立于窗口高度来实现吗?
我有两个小部件,彼此相邻,WidgetA并且WidgetB在一个上QDialog,带有水平布局管理器。
我正在尝试强制执行以下大小/调整大小策略:
对于WidgetA:
为了WidgetB:
WidgetA。但无论我为 WidgetA 选择哪种大小策略,它仍然不会占用 900 的宽度。
以下是代码示例:
class WidgetA(QTextEdit):
def __init__(self, parent = None):
super(WidgetA, self).__init__(parent)
#self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.MinimumExpanding) --> WidgetA width still smaller than 900
#self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.MinimumExpanding) --> WidgetA will be set to minimumSizeHint()
#self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.MinimumExpanding) --> not good for me, since I want WidgetA to be able to shrink up to minimumSizeHint().width()
#self.setSizePolicy(QSizePolicy.Minimum, …Run Code Online (Sandbox Code Playgroud) 我读到“首选策略是非常灵活的策略,小部件的大小可以比 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)