Как сохранить соотношение сторон виджетов в Qt?

Правильный ответ - создать widgets собственный менеджер по расположению. Это ui возможно путем создания подкласса aspect-ratio QLayout.

Методы для реализации при создании подкласса QLayout

void addItem(QLayoutItem* item);
Добавляет элемент в макет.
int count() const;
Возвращает количество элементов.
QLayoutItem* itemAt(int index) const;
Возвращает ссылку на элемент по индексу или 0, если его нет.
QLayoutItem* takeAt(int index);
Принимает и возвращает элемент из макета из индекса или возвращает 0, если его нет.
Qt::Orientations expandingDirections() const;
Возвращает направления раскрытия макетов.
bool hasHeightForWidth() const;
Сообщает, обрабатывает ли макет высоту для расчета ширины.
QSize minimumSize() const;
Возвращает минимальный размер макетов.
void setGeometry(const QRect& rect);
Устанавливает геометрию макета и элементов внутри него. Здесь вам нужно сохранить соотношение сторон и выполнить центрирование.
QSize sizeHint() const;
Возвращает предпочтительный размер макета.

Дополнительная литература

user-interface

qt

widget

aspect-ratio

2022-10-23T12:12:51+00:00