qt qt4 qt5 flowlayout qdockwidget

¿Por qué FlowLayout se comporta de manera diferente en Qt 5.2, en comparación con Qt 4.8?



qt4 qt5 (1)

Esta es la respuesta dada por Marek R. Lo estoy poniendo aquí para que esta pregunta obtenga una respuesta. Durante demasiado tiempo se ha estado haciendo pasar por una pregunta sin respuesta.

Ahora veo el problema. Hice algunos experimentos e investigaciones. Parece que hay un error en Qt. FlowLayout::heightForWidth siempre se llama con el mismo valor de width (en mi caso 103) de forma independiente en el tamaño de la ventana principal y esto lleva una altura más grande que la deseada (por lo general, la ventana es mucho más amplia). Tampoco se llama cuando el ancho de la ventana principal está cambiando (se supone que debe actualizarse la altura del área del muelle).

Acabo de portar mi aplicación de Qt 4.8.4 a Qt 5.2.1. Tengo un problema con la clase FlowLayout como se proporciona en el código de ejemplo de FlowLayout en los documentos de Qt .

Tengo un QMainWindow con un QDockWidget acoplado en la parte inferior del widget central. El QDockWidget tiene un FlowLayout con varios widgets secundarios. En Qt 4.8, esto funcionó como un amuleto, el tamaño de los widgets infantiles se ajustó al tamaño estándar del DockWidget . Sin embargo, en Qt 5.2, DockWidget intenta aumentar su tamaño al máximo (tomando el lugar del widget central). Cambiar su diseño evita este comportamiento no deseado. Pero, por supuesto, uso FlowLayout a propósito.

Para ilustrar el problema, creé un ejemplo mínimo:

El constructor del 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);

¿Alguien sabe cuál es el problema y cómo puedo resolverlo?

Editar He creado un nuevo ejemplo de trabajo mínimo y lamentablemente no puedo reproducir la discrepancia entre Qt 4.8 y Qt 5.2. El mismo problema aparece en Qt 4.8, así que me gustaría presentarlo aquí:

Vista inicial que muestra el dockwidget con base en el fondo y ocupa todo el espacio vertical:

Ver después de cambiar el tamaño del dockwidget con el mouse

Ver después de cambiar el tamaño de la ventana principal con el mouse

Estas capturas de pantalla muestran que los dockwidgets se comportan como se espera después de cambiar manualmente el tamaño del dockwidget. Sin embargo, en la inicialización, el widget toma todo el espacio disponible del widget central, lo cual no es deseable.

¿Alguien sabe de una solución / solución alternativa?