2010-03-03 9 views
9

Tengo un botón seguido de un QGridLayout lleno de widgets. Quiero mostrar/ocultar QGridLayout en cada clic del botón, pero leyendo la documentación de QGridLayout Veo que no hay implementación show()/hide(), tampoco setVisible() método disponible.¿Cómo ocultar completamente un QGridLayout?

¿Cómo logro esto?

Respuesta

6

No mencionó qué versión de Qt está utilizando. (Estoy mirando el 4.4 documentation.)

No he probado esto, pero aquí hay dos ideas:

  • QGridLayout hereda la función QLayoutItem::widget(). Si su diseño es un widget, devolverá un QWidget* al que puede llamar al show() o hide().
  • Si su QGridLayout no es un QWidget, puede anidarlo dentro de un QWidget, y puede show()/hide() ese widget en su lugar.
+0

estoy usando 4.6.1, y ya trató ese widget() - Método> ocultar(), pero THROWED un fallo segmento. Tal vez tengo algo mal –

+1

@clinisbut: ¿Has probado el resultado de 'widget()' para ver si es válido? Puede devolver 'NULL' /' 0'. – Bill

7

Los diseños solo afectan al tamaño/posición de los widgets agregados: para la visibilidad (y todo lo demás - manejo de eventos, enfoque, habilitar + deshabilitar) le importa el widget padre, como se mencionó anteriormente. QLayout :: parentWidget() le proporciona el widget que posee el diseño, que luego puede mostrar y ocultar.

+0

Así que sugieres envolver el qlayout en un qwidget para poder ocultar/mostrar() ¿no es así? –

+0

Gracias por la aclaración sobre cómo funcionan los diseños. No los he usado antes, así que estoy adivinando basándome en la documentación. – Bill

3

Supongo que tiene varias instancias de QGridLayout, solo una debería ser visible según el botón en el que se haya hecho clic. Puede utilizar un QStackedWidget para esto:

La clase QStackedWidget proporciona una pila de widgets en el que sólo un widget es visible a la vez.

Luego, para cada widget en el QStackedWidget debe asociar un QGridLayout por separado.

Véase el Qt documentation para más detalles

Cuestiones relacionadas