作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 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/
我是一名优秀的程序员,十分优秀!