El diseño respeta el sizeHint()
y el minimalSizeHint()
de sus hijos (no el size()
). Por lo tanto, debe volver a implementar estos dos métodos virtuales y devolver el tamaño que desea forzar. Cada vez que su tamaño cambia de sugerencia, debe llamar updateGeometry()
en su propio widget para desencadenar una actualización de la presentación en la que el widget se coloca en
Ver documentación:.
virtual QSize QWidget::sizeHint() const
Esta propiedad tiene el tamaño recomendado para el widget.
[...]
virtual QSize QWidget::minimumSizeHint() const
Esta propiedad contiene el tamaño mínimo recomendado para el widget.
[...]
QLayout nunca cambiará el tamaño de un widget a un tamaño inferior a la sugerencia de tamaño mínimo a menos que se establezca minimumSize() o que la política de tamaño se establezca en QSizePolicy :: Ignore. Si se establece minimumSize(), la sugerencia de tamaño mínimo se ignorará.
Así, a fuerza de un tamaño mínimo de el widget, poner en práctica minimumSizeHint()
devolviendo su mínimo; a forzar un tamaño fijo, implementar ambos devolviendo el mismo tamaño.
también recomiendo la lectura de la siguiente sección en la página de documentación "Layout Management":
widgets personalizados en los diseños
Al realizar su propia clase de widget, también se debe comunicar sus propiedades de diseño. Si el widget tiene uno de los diseños de Qt, esto ya está solucionado. Si el widget no tiene ningún widgets hijos, o utiliza el diseño manual, puede cambiar el comportamiento del widget usando cualquiera o todos de los siguientes mecanismos:
- reimplementar QWidget :: sizeHint() para devolver el tamaño preferido del widget.
- Reimplementar QWidget :: minimumSizeHint() para devolver el tamaño más pequeño que puede tener el widget.
- Llame a QWidget :: setSizePolicy() para especificar los requisitos de espacio del widget.
Llame a QWidget :: updateGeometry() siempre que cambie la sugerencia de tamaño, la sugerencia de tamaño mínimo o la política de tamaño. Esto causará un nuevo cálculo del diseño.Múltiples llamadas consecutivas a QWidget :: updateGeometry() solo causarán un recálculo de diseño.
Update (ver comentarios):
También puede forzar un tamaño (o sólo la altura/anchura), llamando al:
QWidget::setFixedSize(QSize);
QWidget::setFixedHeight(int);
QWidget::setFixedWidth(int);
Estos métodos simplemente establecen el tamaño insinúa el valor dado y llama al updateGeometry()
AFAIK. Pero tal vez hacen un poco más desde (como se ve en los comentarios) esta fue la única forma que pude encontrar para resolver el problema aquí.
Gracias. Agregué esas funciones, pero solo parecían llamarse cuando los widgets se construyeron por primera vez. Cuando cambio el tamaño del diseño, no se vuelven a llamar, a pesar de que obviamente los widgets están cambiando de tamaño. – George
¿También intentó llamar 'updateGeometry()' después? ¿Qué tipo de diseño estás usando? ¿Comprueba dos veces si hay algún error al agregar el widget al diseño? Sin usar el control de cambio de tamaño, ¿su 'QTextEdit' actúa como siempre en los cambios de diseño (cambio de tamaño del widget principal)? – leemes
Bueno, esto es lo que estoy haciendo. No soy un genio en Qt ni nada. http://pastebin.com/mRNLZEAp Recorté todo lo que no era relevante. Si llamo a updateGeometry() en cualquier lugar, pierdo la capacidad de cambiar el tamaño de textedit. – George