标签: qsizepolicy

在运行时调整QDialog的大小

我有一个QDialog子类,包含我的应用程序的一些选项.有些选项是核心的,另一些是高级的,所以我决定将它们放入separeted可检查的QGroupBox中. 在此输入图像描述
当用户选中高级选项框时,我希望我的对话框缩小垂直,但我找不到正确的方法 - 对话框大小保持不变 在此输入图像描述
我将对话框的大小策略设置为Expanding,尝试调用adjustSize()并尝试调用resize()方法 - 没有任何帮助.我无法将programmaticaly对话框调整为小于当前大小(它只能变大).同时,可以手动调整大小. 在此输入图像描述
有谁能够帮我?

user-interface qt resize qdialog qsizepolicy

6
推荐指数
1
解决办法
4479
查看次数

如何正确调整 Qt 小部件的大小?

主要问题

如果有额外的或没有足够的空间来容纳它们,那么为您的小部件提供默认大小并确保它们收缩、扩展或保持固定的“正确”方法是什么?

我认为 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 的最小宽度,但它会阻止用户将其大小调整到他们想要的大小。

qt qwidget qsizepolicy qlayout

6
推荐指数
1
解决办法
9241
查看次数

启用自动换行的 QLabel 的垂直尺寸

我有一个QLabelQVBoxLayout. 大多数情况下,它只有一行文本,但有时,文本可能太长而无法容纳在一行中。所以我必须启用wordWrap.

我希望标签尽可能(垂直)小,因此我设置setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum).

现在,如果有足够的垂直空间,标签会更高,因为它必须只有一行:

启用自动换行的标签

在相同的窗口大小且未启用自动换行的情况下,标签仅占用我希望它占用的最小空间:

没有自动换行的标签

这也可以通过启用 wordWrap 并且独立于窗口高度来实现吗?

c++ qt qlabel qsizepolicy qvboxlayout

5
推荐指数
1
解决办法
959
查看次数

Pyqt:使用布局管理器在两个小部件应用程序上强制执行 sizeHint() 尺寸

我有两个小部件,彼此相邻,WidgetA并且WidgetB在一个上QDialog,带有水平布局管理器。
我正在尝试强制执行以下大小/调整大小策略:
对于WidgetA

  • 水平:宽度应为 900,并且能够收缩(最多 100)和扩展(任意)。
  • 垂直:高度应为 600,并且能够扩展(到任何位置)。

为了WidgetB

  • 水平:宽度应固定为 600。
  • 垂直:高度应为 600,能够扩展(到任何位置)- 与 相同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)

python layout pyqt qsizepolicy

4
推荐指数
1
解决办法
2万
查看次数

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

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

python pyqt pyside qsizepolicy

2
推荐指数
1
解决办法
8574
查看次数