¿Cuál es la mejor manera de "cambiar" un QGraphicsWidget
por otro en una vista existente? Tengo un widget de vista de árbol y un widget de etiqueta, y quiero que ocupen el mismo espacio en diferentes momentos. Específicamente, cuando hay un error, quiero mostrarlo en la etiqueta, y cuando no hay ningún error, quiero mostrar el árbol.Intercambio de un widget con otro en Qt
me han tratado mediante programación ocultando y mostrando uno al otro con hide()
y show()
, pero el problema es que el widget oculto ocupa espacio en mi QGraphicsLinearLayout
incluso cuando está oculta, dejando un espacio vacío. Alternativamente, supongo que podría agregar y eliminar los widgets del diseño, pero eso parece ser muy rígido, ya que implica un cambio en la propiedad de los widgets y tendría que registrar su posición en el diseño para poder insertarlos nuevamente. el lugar correcto.
En Java Swing, usaría un CardLayout
para lograr esto, pero no veo un equivalente en Qt.
ACTUALIZACIÓN: Descubrí QStackedWidget
. Sin embargo, estoy trabajando con un QGraphicsScene
y, por lo tanto, mis widgets no heredan de QWidget
, sino más bien de QGraphicsWidget
, por lo que no puedo agregarlos a un QStackedWidget
.
Usted está un poco equivocado sobre la propiedad de los widgets en el diseño: todos los niños se vuelven a instalar automáticamente cuando se instala el diseño en el widget a través del método setLayout. Por lo tanto, no es necesario que especifique widgets padre para hijos. – chalup
Este es básicamente el enfoque de "mano dura" que describí en la pregunta. Espero algo un poco más directo. (Creo que chalup tiene razón en el tema de la propiedad. El documento de QGraphicsLinearLayout.removeAt dice que la propiedad se transfiere a la persona que llama.) –
¿Ha intentado utilizar un diseño personalizado en el que se ignorarán los widgets ocultos durante el posicionamiento? Esto puede hacer el truco. –