2012-03-30 47 views
5

La jerarquía padre-hijo es la siguiente: mainWindow -> centralWidget -> frame -> widget.cambiar el tamaño de QMainWindow basado en un widget hijo?

Se está cambiando el tamaño del widget durante la vida útil de la aplicación, sin embargo, siempre se establece en un tamaño fijo. Quiero que QMainWindow cambie el tamaño en función de eso, para tener un tamaño mínimo que se necesita para mostrar todos los widgets.

Para hacer eso, actualmente tengo que hacer esto.

widget->setFixedSize(x, y); 
frame->setFixedSize(frame->sizeHint()); 
centralWidget->setFixedSize(centralWidget->sizeHint()); 
mainWindow->setFixedSize(mainWindow->sizeHint()); 

No funciona bien si solo cambio el tamaño de la ventana principal. Todos los padres del widget deben redimensionarse para que esto funcione. ¿Hay una manera más elegante? ¿Es posible cambiar el tamaño de la ventana principal de todos sus hijos?

NOTA: Todos los widgets, excepto 'widget', tienen administración automática de diseños. Por lo tanto, me parece extraño que no se redimensionen en función de 'widget'.

+1

no cayera en la comprensión de su cuestión en su totalidad, pero no se puede llamar 'setMinimumSize()' en lugar de 'setFixedSize()'? – Chris

Respuesta

2

El diseño consiste en determinar el tamaño y la posición de los widgets. Por lo tanto, si cambia el tamaño explícitamente de un widget secundario que está dentro de un diseño, debe asegurarse de que el nuevo tamaño se pase correctamente a través del sistema de diseño. Esto se puede hacer asegurando que el widget's sizeHint devuelva el nuevo tamaño. El valor devuelto por el sizeHint() se usará cuando el diseño calcule el nuevo tamaño. Así que después de que sizeInter() ha cambiado, simplemente llame a updateGeometry() [qt.nokia.com] que notificará al sistema de diseño que el widget ha cambiado y puede necesitar cambiar la geometría.

Una forma alternativa de asegurarse de que el widget padre se redimensiona en respuesta a su cambio de tamaño del elemento secundario es llamar a setFixedSize() en el elemento secundario.

Para más detalles comprobar esto ...

http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1

Usted debe dejar a disposición de gestionar el tamaño de los widgets. En lo que a mí respecta no hay 2 situaciones:

  1. Con diseño cuando cambie el tamaño de uno de los padres de todos los niños a cambiar el tamaño demasiado con respecto a la política de tamaño que se les proporciona. Si elige una política fija, los niños no serán redimensionados. Entonces tienes que redimensionarlos a mano ... pero es bastante raro.

  2. Cuando cambia el tamaño de un niño como lo hace, el tamaño de los padres no cambia automáticamente. Tienes que hacerlo a mano. Afortunadamente hay una "función mágica para eso: AdjustSize. Si lo llamas desde QMainWindow, todos los widgets se redimensionarán a su tamaño óptimo. Es posible (no puedo probarlo aquí) que esto no funcione en tiempo de ejecución si la política de tamaño es en fija.

Espero que ayude

+0

Qt 5.5. 'adjustSize 'does not work,' resize (sizeHint()) 'does. Go figure. –

Cuestiones relacionadas