Могу ли я сделать QMainWindow с макетом сетки, изменяющим размер только по горизонтали, но не по вертикали?
Я хочу, чтобы его вертикальный размер был минимальным, необходимым для хранения всех кнопок/линейных правок.
Могу ли я сделать QMainWindow с макетом сетки, изменяющим размер только по горизонтали, но не по вертикали?
Я хочу, чтобы его вертикальный размер был минимальным, необходимым для хранения всех кнопок/линейных правок.
Да, ты можешь. Поскольку QMainWindow наследуется от QWidget, используйте настройки размера QWidget. чтобы разрешить изменение размера только в горизонтальном направлении.
Если вы работаете в Qt Designer, установите политику вертикального размера как фиксированную, а минимальную высоту — желаемую. В коде:
QMainWindow *mainWindow = new QMainWindow();
mainWindow->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
Будьте осторожны, используя абсолютный фиксированный размер, так как элементы управления могут расти по вертикали (например, пользователь устанавливает шрифт с высоким разрешением на дюйм на своем рабочем столе).
Другой способ я видел в одном из примеров в книге под названием "Программирование C++ GUI с помощью Qt 4". Они сделали это с
setFixedHeight(sizeHint().height());
код ниже работает нормально
setFixedHeight(sizeHint().height());
но код ниже
QMainWindow *mainWindow = new QMainWindow();
mainWindow->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
не работает, потому что в функцию setSizePolicy
передан неверный параметр. Эта функция имеет две формы, одна из которых требует QSizePolicy::Policy
, а другая требует QSizePolicy
, но QSizePolicy::Expanding
не является ни QSizePolicy
, ни QSizePolicy::Policy
.