Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/04/2015, 05:56
Avatar de jc_moj
jc_moj
 
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 15 años, 4 meses
Puntos: 12
QT: objeto no se destruye

Hola

Estoy teniendo un problema con la destrucción de un objeto que creo en el main y que en determinadas circunstancias, no se destruye, un poco de código para ver:

El main:

Código C++:
Ver original
  1. int main(int argc, char *argv[])
  2. {
  3.     QApplication a(argc, argv);
  4.  
  5.     // más código aquí
  6.  
  7.     // el objeto en cuestion es éste:
  8.     Configuracion config(carpetaDatos + QDir::separator() + "cfg.ini");
  9.    
  10.     // más código aquí
  11.  
  12.     // abrir la ventana principal, que le paso el objeto creado anteriormente
  13.     MainWindow w(&config);
  14.     w.show();
  15.  
  16.     return a.exec();
  17. }

El constructor del MainWindow es así:

Código C++:
Ver original
  1. MainWindow::MainWindow(Configuracion *cfg, QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow),
  2.     config(cfg)
  3.     // config es un puntero a Configuracion
  4. {
  5.     ui->setupUi(this);
  6.    
  7.     // más código aquí
  8. }

Y en el destructor de Configuración he puesto que me imprima un mensaje:

Código C++:
Ver original
  1. Configuracion::~Configuracion()
  2. {
  3.     qDebug() << "Configuracion destruida";
  4. }

En la ventana tengo un QPushButton y un QAction, ambos conectados con el SLOT "close()" del QMainWindow y todo funciona, cuando cierro la ventana por alguno de esos dos opciones o pulsando el botón "X", aparece el mensaje de "Configuración destruida".

Ahora bien, tengo puesto un QChechBox, que si está marcado, cuando termina de imprimir, cierra el programa, esto lo tengo hecho de la siguiente forma:

Código C++:
Ver original
  1. // salir si se marcó la casilla
  2. if(ui->chSalir->isChecked()) this->close();
Pues bien, la ventana se cierra, pero el objeto Configuracion no se destruye. Esto solo me ocurre desde windows, he probado con linux y no ocurre.

¿Debo hacer ésto de otra forma?

Un saludo