Сделайте QMainWindow только горизонтально-изменяемым по размеру - то есть ширина изменяется, но высота фиксируется

Можно ли создать QMainWindow с сеткой, размер которой изменяется только горизонтально, но не вертикально?

Я хочу, чтобы его вертикальный размер был минимальным, необходимым для хранения всех кнопок/строк.

3 ответа

Я видел другой способ в одном из примеров в книге под названием "С++ GUI Programming with Qt 4". Они сделали это с помощью

setFixedHeight(sizeHint().height());


Да, вы можете. Поскольку QMainWindow наследует от QWidget, используйте параметры QWidget политики размера, чтобы разрешить изменение размера в горизонтальном направлении.

Если вы работаете в Qt Designer, установите политику вертикального размера, которая будет исправлена, а минимальная высота - ваша желаемая высота. В коде:

QMainWindow *mainWindow = new QMainWindow();
mainWindow->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

Будьте осторожны, используя абсолютный фиксированный размер, поскольку элементы управления, возможно, должны расти вертикально (например, пользователь устанавливает на своем рабочем столе высокий шрифт DPI).


код ниже работает отлично

setFixedHeight(sizeHint().height());

но код ниже

QMainWindow *mainWindow = new QMainWindow();
mainWindow->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

не работает, потому что неправильный параметр передается функции setSizePolicy. Эта функция имеет две формы, одна из которых требует QSizePolicy::Policy, а другая требуется QSizePolicy, но QSizePolicy::Expanding не является ни QSizePolicy, ни QSizePolicy::Policy.

licensed under cc by-sa 3.0 with attribution.