2010-06-07 19 views
6

Consideremos que tenemos un QWidget y un QLayout llamado general_layout que contiene otros widgets y diseños. general_layout se fija como el diseño QWidget así:Qt - cambie el diseño de QWidget

setLayout(general_layout) 

Ahora debe cambiar el contenido de QWidget. ¿Cómo puedo hacer eso? Intenté eliminar y crear un nuevo diseño para el QWidget y ese nuevo diseño configurado como un diseño del QWidget, pero no pude completar mis intenciones con éxito.

Este es mi código:

delete general_layout; 
general_layout = new QHBoxLayout; 
general_layout->addLayout(some_layout); 
myQWidget->setLayout(general_layout); 
+0

Podría ser más específico acerca de su problema? Lo que está haciendo parece ser correcto (es decir, eliminar el diseño anterior antes de configurar uno nuevo). – Job

+0

¡Claro! Hago lo siguiente: delete general_layout; general_layout = new QHBoxLayout; general_layout-> addLayout (some_layout); myQWidget-> setLayout (general_layout); – Narek

Respuesta

11

El problema es que los reproductores de una disposición no se destruyen al borrar un diseño. Esto da como resultado que todos los widgets secundarios de myQWidget sigan estando presentes, ya sea sin un diseño.

La solución es simple: añadir un

qDeleteAll(myQWidget->children()); 

después

delete general_layout; 
+0

Parece que ese fue el problema. ¡¡¡Muchas gracias!!! Solo una pregunta más también. Quiero tener un diálogo que cambie su estructura (en el aspecto de esta pregunta). Así que lo hago con la creación de diseño, eliminación y creación de uno nuevo. ¿Es ese un buen enfoque? – Narek

+4

Podría ser si ya no necesita la primera estructura. Si lo hace, usar QStackedLayout (http://doc.trolltech.com/latest/qstackedlayout.html) es mucho más fácil. Si está intentando implementar algo así como un asistente, eche un vistazo a QWizard (http://doc.trolltech.com/latest/qwizard.html). – Job

+0

qDeleteAll (myQWidget-> children()); función borra todos los hijos, pero ¿qué pasa con los hijos de los niños. Me refiero a que dentro de los elementos secundarios de myQWidget no hay diseños que sean diseños secundarios de general_layout. Cuando llamo a un método de un diseño secundario de general_layout, mi aplicación explota (por lo que invito ese puntero se destruye), pero cuando compruebo si es igual a 0 (m_childLayout_of_General_Layout == 0), entonces se ignora if statement. ¿Qué pasa? ¿Está eliminado o no? – Narek

Cuestiones relacionadas