setcolumnstretch qvboxlayout qspaceritem qhboxlayout example addwidget c++ qt qt-creator resize qlayout

c++ - qspaceritem - qvboxlayout



Cómo redimensionar programáticamente un QMainWindow a su tamaño mínimo (3)

Cuando tengo un QMainWindow con un diseño de cuadrícula, al redimensionarlo con el mouse, no irá por debajo del tamaño mínimo que es necesario para que todos los controles se muestren correctamente. En mi aplicación, a veces oculto los controles de forma programática, pero la ventana sigue siendo del mismo tamaño y el resto de los controles se extienden, con demasiado espacio entre ellos. Termino cambiando el tamaño del diálogo manualmente para que no se vea feo.

¿Puedo establecer programáticamente el tamaño vertical del diálogo en este mínimo que obtengo al cambiar el tamaño manualmente después de que haya ocultado controles en él?


Este código hará el truco (cambia el tamaño solo de la altura):

QWidget widget; widget.resize(widget.width(), widget.minimumHeight());


Existe una jerarquía entre QLayout :: SizeConstraint , QWidget :: minimumSizeHint , QWidget :: minimumSize , y puede encontrarla en la documentación.

  • QWidget::minimumSize no está configurado de manera predeterminada. Cuando lo es, prevalece sobre QWidget::minimumSizeHint
  • QWidget::minimumSizeHint no es válido si el widget no está en un diseño (lo que significa que se puede cambiar el tamaño a 0 con el mouse), de lo contrario, utilice el que está definido por el diseño.
  • QLayout::SizeConstraint mantiene el comportamiento de diseño predeterminado de los widgets * directamente * manage. Si anida un diseño A dentro de un diseño B , todos los widgets agregados a A usarán su propiedad. Además, si un widget W en B define su propio diseño, estas restricciones de diseño son las que se aplicarán para el widget W

Sabiendo eso, sigue estos pasos. Podría funcionar, no lo intenté :):

  • Establezca el tamaño mínimo de todos los widgets que usa.
  • Asegúrese de que la restricción de tamaño de todos sus diseños esté establecida en QLayout::SetDefaultConstraint .

Descubrí que cambiar el tamaño del centralWidget en QMainWindow luego cambiar el tamaño de QMainWindow es lo QMainWindow funciona. En otras palabras:

from PyQt4 import QtGui class MyMainWindow(QtGui.QMainWindow): def __init__(self): # define some widgets and stuff def whenWidgetsAreHidden(self): # this method should be triggered when you hide your widgets self.centralWidget.adjustSize() self.adjustSize()

Tenga en cuenta que hay otros widgets en QMainWindowLayout. Según esta imagen de la Documentación Qt , también hay Widgets Dock y otras cosas que podrían estar presentes. Solo uso el centralWidget así que esta solución funciona para mí.