gpt4 book ai didi

c++ - 如何在父级大小更改时更改子级小部件的大小?

转载 作者:行者123 更新时间:2023-11-28 04:33:16 26 4
gpt4 key购买 nike

我有 2 个小部件,第二个小部件是第一个小部件的 child 。我以为如果你改变父部件的大小,子部件也会改变它的大小,但事实并非如此。我在互联网上搜索了我的问题的解决方案,但也许我在寻找解决方案时没有正确地提出我的问题。我没有找到解决方案,因此写在这里。

当父窗口小部件调整大小时,我应该怎么做才能使子窗口小部件更改其大小?

最佳答案

原因

要自动响应其父小部件的大小变化,必须将子小部件添加到其布局中。

解决方案

由于您不想使用自动布局,因此您必须手动调整子部件的大小。为此,在您的自定义小部件中重新实现 QWidget::resizeEvent

例子

假设您有一个指向您的子部件 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的重新实现纯粹是为了演示目的。

关于c++ - 如何在父级大小更改时更改子级小部件的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52297273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com