Почему FlowLayout ведет себя по-разному в Qt 5.2, по сравнению с Qt 4.8?
Я только что портировал свое приложение из Qt 4.8.4 в Qt 5.2.1. У меня проблема с классом FlowLayout
, как показано в пример кода FlowLayout в документах Qt.
У меня есть QMainWindow
с QDockWidget
, закрепленным в нижней части центрального виджета.
QDockWidget
имеет FlowLayout
с несколькими дочерними виджетами. В Qt 4.8 это работало как шарм, размер дочерних виджетов соответствовал стандартным размерам DockWidget
. Тем не менее, в Qt 5.2, DockWidget
пытается увеличить свой размер до максимума (принимая место от центрального виджета). Изменение его компоновки предотвращает это нежелательное поведение. Но, конечно, я использую FlowLayout
специально.
Чтобы проиллюстрировать проблему, я создал минимальный пример:
Конструктор DockWidget
:
QGroupBox *generalBox = new QGroupBox("");
generalBoxLayout = new FlowLayout;
generalBox->setLayout(generalBoxLayout);
for(int i=0; i<10; ++i)
{
QPushButton *button = new QPushButton("Test", this);
button->setMinimumWidth(100);
button->setMinimumHeight(100);
generalBoxLayout->addWidget(button);
}
this->setWidget(generalBox);
Кто-нибудь знает, в чем проблема и как я могу ее решить?
Edit
Я создал новый минимальный рабочий пример и, к сожалению, не могу воспроизвести несоответствие между Qt 4.8 и Qt 5.2. Эта же проблема проявляется в Qt 4.8, поэтому я хотел бы представить ее здесь:
Исходное представление, показывающее док-виджет с нижней док-станцией, занимающий все вертикальное пространство:
![Initial view showing the bottom-docked dockwidget]()
Просмотр после изменения размера dockwidget с помощью мыши
![View after resizing the dockwidget with the mouse]()
Просмотр после изменения размера основного окна с помощью мыши
![View after resizing the mainwindow with the mouse]()
Эти скриншоты показывают, что док-виджеты ведут себя так, как ожидалось, после изменения размера док-виджета вручную. Однако при инициализации виджет занимает все свободное место из центрального виджета, что нежелательно.
Кто-нибудь знает о решении/обходном пути?
Ответы
Ответ 1
Это ответ, полученный Marek R. Я помещаю его здесь, чтобы этот вопрос получил ответ. Слишком долго он маскировался как неотвеченный вопрос.
Я вижу проблему сейчас. Я провел несколько экспериментов и исследований. Это выглядит как некоторые ошибки в Qt. FlowLayout::heightForWidth
всегда называется с таким же значением width
(в моем случае 103) независимо в главном окне размер и это приводит к росту больше, чем желательно (обычно окно много Шире). Также он не вызывается при изменении ширины главного окна (он должен обновить высоту области док-станции).