изменить размер QMainWindow на основе дочернего виджета? - PullRequest
6 голосов
/ 30 марта 2012

Дочерняя и родительская иерархия выглядит следующим образом: mainWindow -> centralWidget -> frame -> widget.

Размер виджета изменяется в течение времени жизни приложения, однако он всегда имеет фиксированный размер.Я хочу, чтобы размер QMainWindow изменялся в зависимости от этого - иметь минимальный размер, необходимый для отображения всех виджетов.

Для этого мне нужно сделать это в настоящее время.

widget->setFixedSize(x, y);
frame->setFixedSize(frame->sizeHint());
centralWidget->setFixedSize(centralWidget->sizeHint());
mainWindow->setFixedSize(mainWindow->sizeHint());

не работает должным образом, если я только изменить размер главного окна.Все родители виджета должны быть изменены, чтобы это работало.Есть ли более элегантный способ?Можно ли изменить размер вызова главного окна для всех его дочерних элементов?

ПРИМЕЧАНИЕ. Все виджеты, кроме «виджетов», имеют автоматическое управление макетом.Поэтому я нахожу странным, что они не изменяют размеры самих себя в зависимости от «виджета».

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Работа макета заключается в определении размера и положения виджетов.Поэтому, если вы явно измените размер дочернего виджета, который находится внутри макета, вам необходимо убедиться, что новый размер правильно передан через систему макетов.Это можно сделать, убедившись, что sizeHint () виджета возвращает новый размер.Значение, возвращаемое sizeHint (), будет использовано при расчете макета нового размера.Поэтому после изменения sizeHint () просто вызовите updateGeometry () [qt.nokia.com], который уведомит систему макетов об изменении виджета и может потребоваться изменить геометрию.

Альтернативный способ обеспечениячто размер родительского виджета изменяется в ответ на изменение размера его дочернего элемента, это вызов метода setFixedSize () для дочернего элемента.

Для более подробной информации проверьте это ...

http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1 голос
/ 30 марта 2012

Вы должны позволить макету управлять размером виджетов. Насколько мне известно, есть 2 ситуации:

  1. При макете при изменении размера родительского элемента все дочерние элементы также изменяют размеры в соответствии с предоставленной им политикой размера. Если вы выберете фиксированную политику, дети не будут изменены. Так что вы должны изменить их размер вручную ... но это странно.

  2. Когда вы изменяете размер ребенка, как вы это делаете, размер родительского размера не изменяется автоматически. Вы должны сделать это вручную. К счастью, для этого есть «волшебная функция»: AdjustSize. Если вы вызовете ее из QMainWindow, все виджеты будут изменены до их оптимизированного размера. Возможно (я не могу проверить это здесь), что это не будет работать во время выполнения, если политика размера установлен на фиксированный.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...