Я недавно перешел на Qt5 и столкнулся с проблемой, которую я не получаю в Qt4.
У меня есть модальное диалоговое окно, которое должно иметь фиксированную высоту, но изменяемой ширины. Для демонстрации приведена урезанная версия.
QDialog dialog;
QHBoxLayout hLayout;
QLineEdit lineEdit;
QPushButton button("Check Current Height");
hLayout.addWidget(&lineEdit);
hLayout.addWidget(&button);
dialog.setLayout(&hLayout);
dialog.setFixedHeight(dialog.sizeHint().height());
qDebug() << dialog.height()
<< dialog.sizeHint().height()
<< dialog.minimumHeight()
<< dialog.maximumHeight();
dialog.exec();
Даже когда я использую setMinimumHeight & setMaximumHeight вместо setFixedHeight по-прежнему можно изменять.
в приведенном выше примере весь материал, подаваемый в qDebug, показан равным. Если минимальная и максимальная высота равны, диалог не должен быть изменяемого размера. Но здесь, это так.
Здесь стоит упомянуть, что без setFixedHeight диалоговое окно полностью изменяемого размера, но с setFixedHeight диалоговое окно изменяемого размера только до определенной точки.
Обновить: Я подключился button
в слот, который выводит dialog
«s minimumHeight
, maximumHeight
, sizeHint.height()
и текущий height
так же, как qDebug()
выше. И когда я изменяю размер моего диалога, иногда его текущая высота превышает его максимальную высоту. Как это возможно?!
я нашел это ТАК сообщение где в этом наиболее популярном ответе я могу прочитать, что установка политики размера в окнах верхнего уровня не работает. Может быть, если вы использовали setLayout()
метод вашего диалога и используется setFixedHeight()
на вашем основном макете в вашем диалоге, тогда это будет работать.
В качестве альтернативы вы можете переопределить resizeEvent()
вашего диалога и отключить все изменения высоты вручную …
Других решений пока нет …