Qt布局系统提供了一种简单而强大的方式来自动排列小部件内的子小部件,以确保它们充分利用可用空间。
Qt技术交流群:166830288??????欢迎一起进群讨论
点击获取Qt组件下载将小部件添加到布局时,布局过程如下:
拉伸因素
小部件通常是在没有设置任何拉伸因素的情况下创建的,当它们在布局中布局时,根据QWidget::sizePolicy() 或它们的最小尺寸提示,以较大者为准,为这些小部件分配空间份额。拉伸因素用于更改按比例分配的小部件的空间量。
如果使用没有设置拉伸因素的QHBoxLayout?布局了三个小部件,将得到如下布局:
class="img-thumbnail">如果我们对每个小部件应用拉伸因素,它们将按比例排列(但绝不会小于它们的最小尺寸提示),例如:
当您创建自己的小部件类时,还应该传达其布局属性。 如果小部件使用 Qt 布局当中的一个,这已经被处理了。如果小部件没有任何子小部件,或者使用手动布局,您可以使用以下任何或所有机制更改小部件的操作:
每当尺寸提示、最小尺寸提示或尺寸政策发生变化时,调用?QWidget::updateGeometry(),这会导致重新计算布局,多次连续调用?QWidget::updateGeometry() 只会导致一次布局重新计算。
如果您的小部件的首选高度取决于其实际宽度(例如,具有自动分词的标签),请在小部件的大小策略中设置height-for-width?标志并重新实现?QWidget::heightForWidth()。
即使你实现了?QWidget::heightForWidth(),提供一个合理的 sizeHint() 仍然是个好主意。
在标签小部件中使用富文本可能会给其父小部件的布局带来一些问题,当标签是自动换行时,Qt 的布局管理器处理富文本的方式会出现问题。
在某些情况下,父布局被置于 QLayout::FreeResize 模式,这意味着它不会调整其内容的布局以适应小尺寸窗口,甚至阻止用户使窗口太小而无法使用,这可以通过子类化有问题的小部件并实现合适的?sizeHint() 和?minimumSizeHint() 函数来克服。
在某些情况下,将布局添加到小部件时是相关的。 当您设置 QDockWidget 或 QScrollArea 的小部件时(使用 QDockWidget::setWidget() 和 QScrollArea::setWidget()),布局必须已经在小部件上设置。 如果没有,小部件将不可见。
Qt技术交流群:166830288??????欢迎一起进群讨论
?