父级大小更改时如何更改子窗口小部件的大小?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父级大小更改时如何更改子窗口小部件的大小?相关的知识,希望对你有一定的参考价值。
我有2个小部件,第二个小部件是第一个小孩。我认为如果你改变父窗口小部件的大小,子窗口小部件也会改变它的大小,但事实并非如此。我在互联网上搜索了我的问题的解决方案,但也许我在寻找解决方案时没有正确地提出我的问题。我没有找到解决方案因此写在这里。
在调整父级大小时,如何使子窗口小部件更改其大小?
Cause
要自动响应其父窗口小部件的大小更改,必须将子窗口小部件添加到其布局中。
Solution
由于您不想使用自动布局,因此必须手动调整子窗口小部件的大小。为此,在自定义小部件中重新实现QWidget::resizeEvent
。
Example
如果您有一个指向您的子窗口小部件m_child
的指针,并且此子项已经定位并调整大小,例如类似的东西:
m_child->move(10, 20);
m_child->resize(60, 40);
resizeEvent
的可能实现,保留边距,即子边缘和父边缘之间的距离,可以是:
void ParentWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
int oldWidth = event->oldSize().width();
if (oldWidth >= 0)
m_child->resize(m_child->width() + event->size().width() - oldWidth,
m_child->height() + event->size().height() - event->oldSize().height());
}
我为您准备的示例的完整代码可在GitHub上找到。
注意:示例中QWidget::paintEvent
的重新实现纯粹是为了演示目的。
好吧,无布局解决方案非常明显:在父级中覆盖resizeEvent
方法并驱动子级从那里调整大小。
另一方面,将子窗口小部件保留在父窗口小部件布局中会授予它自动调整其父窗口的大小,但问题是:如何将子窗口小部件位置设置为所选的坐标?
我建议一种技术。
假设您希望孩子水平移动。给父项一个QHBoxLayout
布局(将布局边距和间距属性设置为0
),并将子项添加到它,因此它将水平占据整个空间。然后在孩子左边的同一个布局添加一个QWidget
:这个小部件将充当填充程序。如果您希望子项x
为42,请使用width
方法以编程方式将填充setFixedWidth
设置为42,或将其最小和最大宽度设置为42。
显然,如果你有很多孩子,他们可以移动到任何地方(并且重叠,也许)完全放弃布局并诉诸于我的第一个建议,因为,一般来说,布局旨在使事物彼此固定,也许这不是案子。
以上是关于父级大小更改时如何更改子窗口小部件的大小?的主要内容,如果未能解决你的问题,请参考以下文章
当小部件集更改时,调整 QWidget 的大小以仅保存当前小部件
如何在桌面布局从4 * 5变为5 * 5时自动更改窗口小部件的宽度?
如何在字体更改时停止 Tkinter Text 小部件调整大小?
如何在 android 中动态更改 EditText 小部件的文本大小?