Причина
Чтобы автоматически реагировать на изменения размера родительского виджета, к его макету необходимо добавить дочерний виджет.
Решение
Поскольку вы не хотите использовать автоматический макет, вы должны вручную изменить размер дочернего виджета. Для этого переопределите 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
в примере приведена исключительно для демонстрационных целей.