Невозможно получить QGraphicsView в QFormLayout для расширения по вертикали

Я унаследовал кодовую базу Qt с классом Editor, основанным на QWidget. Редактор настроен на автоматическое использование QFormLayout в качестве своего макета, и так много связанного кода предполагает QFormLayout, что я не могу реально перекодировать для другого макета.

Проблема в том, что редактор, над которым я работаю, будет иметь интерактивный QGraphicsView, размер которого должен измениться, чтобы заполнить пространство редактора. К сожалению, он будет изменять размер только по горизонтали, а не по вертикали. QGraphicsView (на который ссылается QGraphicsView *m_view) добавляется в макет следующим образом:

void EditorSubclass::initialize(...)
{
    ...
    QFormLayout* fl = qobject_cast<QFormLayout*>(this->layout());
    ...
    fl->addRow(m_view); // m_view is an instance of a QGraphicsView subclass
    ...
}

(класс Editor устанавливает макет, поэтому этот подкласс просто извлекает его, а не создает новый)

m_view — единственное, что добавлено в QFormLayout. Я попытался заставить его расширяться по вертикали, используя несколько комбинаций подсказок размера, политики размера, ограничений размера, политики роста поля - вы называете это. Независимо от того, что я делаю, m_view устанавливает свою высоту в соответствии с установленным для него минимальным размером (75 пикселей, если я не использую setMinimumSize или setMinimumHeight). Я проверил унаследованный класс Editor, но он не делает ничего, что могло бы повлиять на размер.

Я читал в других подобных вопросах, что строки QFormLayout, не изменяющие размер по вертикали, являются нормальным поведением. Обходные пути, как правило, включают использование другого макета, но здесь это нереалистичный вариант. Вопрос, заданный 2-1/2 года назад - "QSpacerItem In QFormLayout - вертикальное расширение " - получил интригующий ответ, включающий "уровень косвенности путем помещения [] HBoxLayout в QWidget", но я не могу понять, как это попробовать из данного описания, и у меня недостаточно репутации, чтобы опубликовать комментарий с просьбой о подробностях (что в любом случае может быть бесполезным в такой старой ветке).

Итак, кто-нибудь знает, как заставить QFormLayout разрешить моему m_view заполнить доступную высоту и ширину?


person mastick    schedule 18.05.2015    source источник
comment
Привет, если m_view действительно является единственным виджетом в QFormLayout (или любом другом типе макета), ваш виджет m_view должен заполнять свой родительский виджет (EditorSubclass). Если нет, единственная возможность - добавить ограничение размера где-нибудь (в коде или с дизайнером Qt). Просто попробуйте с другим новым случайным виджетом, чтобы убедиться, что проблема связана с самим виджетом m_view.   -  person Martin    schedule 19.05.2015
comment
Проблема не в m_view, поскольку я пытался использовать другие виджеты (по отдельности и в комбинации), и они не будут заполнять доступное пространство, а только указанную минимальную высоту.   -  person mastick    schedule 25.05.2015
comment
У меня в основном похожая проблема, хотя я решил ее, по крайней мере, частично... -not-ca" title="qt qgraphicsview layout не сжимается, sizehint, minimumsizehint и т. д. not ca"> stackoverflow.com/questions/39955551/   -  person TheSHEEEP    schedule 11.10.2016