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 sobreQWidget::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ñoA
dentro de un diseñoB
, todos los widgets agregados aA
usarán su propiedad. Además, si un widgetW
enB
define su propio diseño, estas restricciones de diseño son las que se aplicarán para el widgetW
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í.