Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/03/2015, 05:52
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Qt. Borrar el contenido de un Widget de forma efectiva

Bueno, a ver si consigo describir el problema de forma mas efectiva que en el título:

Tengo un QMainWindow que en el centro tiene un Widget en blanco. Este está creado en el Designer.

El contenido del Widget está en una clase aparte, y la composición está creada a mano.

La idea es: (no sé si aquí ya estaré empezando a pifiarla)

Tengo un puntero a la clase donde está contenida la información del contenido (y la lógica y demás)

Código C++:
Ver original
  1. Datos* datos;

En el constructor, se desarrollan todos los widgets y demás, quedando un layout externo que engloba todo el tinglado, y que queda ligado al widget vacío del QMainWindow.

Código C++:
Ver original
  1. Datos::Datos (QWidget *parent):QWidget(parent)
  2. {
  3. //toda la composición y demás cosas del constructor
  4.  
  5. mainLayout= new QVBoxLayout(parent); //el layout exterior
  6. }

Y ahora la llamada desde QMainWindow:
Código C++:
Ver original
  1. if (Contenido)
  2.         {
  3.             delete Contenido;
  4.         }
  5.         Contenido= new Datos(ui->Lienzo); //el widget en blanco creado en el designer

El problema que tengo, y esta es la duda...probablemente mas de mal aprendiz de C++ que otra cosa es:

Si en la clase datos borro de forma explícita el lienzo exterior:
Código C++:
Ver original
  1. Datos::~Datos()
  2. {
  3.     --------------
  4.     delete mainLayout;
  5.     ----------------

El programa falla, entiendo que porque estoy intentando borrar dos veces el mainLayout.

Pero si no lo borro de manera expresa, cuando abro un fichero y luego quiero abrir otro, el programa me lanza un error diciendo que no puede añadir otro layout a ui->Lienzo porque ya hay uno existente.

En fin, ya sé que es un poco jaleoso lo que describo, pero como siempre, toda ayuda será bien recibida. Yo mientras voy a pegarme otro rato con esto, a ver si encuentro la solución

Saludos y gracias!
__________________
Mi calculadora en Qt