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

Могу ли я сделать QMainWindow с макетом сетки, изменяющим размер только по горизонтали, но не по вертикали?

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


person sashoalm    schedule 29.06.2011    source источник


Ответы (3)


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

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

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

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

person docsteer    schedule 29.06.2011

Другой способ я видел в одном из примеров в книге под названием "Программирование C++ GUI с помощью Qt 4". Они сделали это с

    setFixedHeight(sizeHint().height());
person sashoalm    schedule 16.03.2012

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

setFixedHeight(sizeHint().height());

но код ниже

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

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

person H.B    schedule 09.12.2014