Подтвердить что ты не робот

Почему 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

Эти скриншоты показывают, что док-виджеты ведут себя так, как ожидалось, после изменения размера док-виджета вручную. Однако при инициализации виджет занимает все свободное место из центрального виджета, что нежелательно.

Кто-нибудь знает о решении/обходном пути?

4b9b3361

Ответ 1

Это ответ, полученный Marek R. Я помещаю его здесь, чтобы этот вопрос получил ответ. Слишком долго он маскировался как неотвеченный вопрос.

Я вижу проблему сейчас. Я провел несколько экспериментов и исследований. Это выглядит как некоторые ошибки в Qt. FlowLayout::heightForWidth всегда называется с таким же значением width (в моем случае 103) независимо в главном окне размер и это приводит к росту больше, чем желательно (обычно окно много Шире). Также он не вызывается при изменении ширины главного окна (он должен обновить высоту области док-станции).