Я только что портировал свое приложение из Qt 4.8.4 в Qt 5.2.1. У меня проблема с классом FlowLayout
, как указано в FlowLayout example code in the Qt docs.Почему FlowLayout ведет себя по-разному в Qt 5.2, по сравнению с Qt 4.8?
У меня есть 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);
Кто-то знает, в чем проблема и как я могу решить эту проблему?
Редактировать Я создал новый минимальный рабочий пример и, к сожалению, не может воспроизвести несоответствие между Qt 4.8 и Qt 5.2. Та же проблема проявляется в Qt 4.8, так что я все еще хотел бы представить его здесь:
Первоначальный вид, показывающий нижний док прикрепляемый принимая все пространство по вертикали:
Вид после изменения размера прикрепляемый с помощью мыши
Вид после изменения размера MainWindow с помощью мыши
Эти скриншоты показывают, что док-виджеты ведут себя так, как ожидается, после изменения размера док-виджет вручную. Однако при инициализации виджет занимает все свободное место из центрального виджета, что нежелательно.
Кто-нибудь знает о решении/обходном пути?
Я пробовал его с Qt 4.8.1, 5.0.1, 5.2.1, и я не заметил никакой разницы. Вам нужно вставить несколько снимков экрана, чтобы объяснить, в чем проблема. –
Я создал новый минимальный рабочий пример и довольно смущающе, не смог воспроизвести оригинальную проблему. Тем не менее, для меня это все еще неожиданное поведение. Я расширил свои вопросы с помощью скриншотов. –
Я вижу проблему сейчас. Я провел несколько экспериментов и исследований. Это похоже на ошибку в Qt. 'FlowLayout :: heightForWidth' всегда вызывается с одинаковым значением' width' (в моем случае 103) независимо от размера основного окна, и это приводит к тому, что высота больше желаемого (обычно окно намного шире). Также он не вызывается, когда меняется ширина главного окна (предполагается, что он обновляет высоту области док-станции). –