Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt : 5.11.1 - Qt Creator : 4.7.0 - Qt Installer : 3.0.4 - JOM : 1.1.2 - QBS : 1.12.0

QT ui est destructeur

Bonjour,
j'ai suivi la facon de faire de cette page : http://doc.trolltech.com/qq/qq14-designer.html pour integrer des ui de qtdesigner dans mon application,
mais lorsque je ferme la fenetre ca passe pas dans mon destructeur..
QQun sait comment forcer çà?

Merci

Réponses

  • Salut,

    Comment testes-tu? En débuggant?
    On ne "force" pas un passage dans un destructeur, il est tout naturellement appelé par delete (pour les pointeurs) ou à la fin de sa portée (pour les variables déclarés sur la pile).
  • November 2006 modifié
    Bé justement non,
    J'ai une mainwindow générée par designer avec uic comme ils le précisent dans la doc.
    Ensuite dans cette mainwindow j'ai 3 widgets (pop up car je ne les ai ai pas attraché au premier) à moi avec des pointeurs.
    Donc dans le delete du mainwindow je fais un delete sur ces pointeurs mais mes pop-up sont toujours présents quand je ferme ma mainwindow...
  • Je pense qu'il faudrait que tu poste un peu de code.
    Mais note que FERMER ta mainwindow ne signifie pas DETRUIRE ta mainwindow !
    en gros si dans ton main tu ecris
    main()
    {
    mainwindow w;
    w.show();
    app.exec()
    }

    ta fenetre ne sera DETRUITE qu'a la sortie de ton main (la fin de ton prog koi !)

    Ludo
  • Si tu veux que ta fenetre soit detruite lors d'un appel à close() ou lors du click sur la croix en haut à droite de ca frame il faut utiliser :

    mainwindow->setAttribute( Qt::WA_DeleteOnClose );

    alors là ton destructeur sera apelé.

    P@sNox,
  • mainwindow->setAttribute( Qt::WA_DeleteOnClose );
    Tiens, j'avais pas remarque cette option,
    Bien vu

    Ludo
  • Mouarf je suis un mangeur de documentation Qt c'est pour ca que je connais bien les petits trucs :D

    P@sNox,
  • xabi said:
    Donc dans le delete du mainwindow je fais un delete sur ces pointeurs mais mes pop-up sont toujours présents quand je ferme ma mainwindow...
    Pas besoin si tu codes proprement :P
    En gros, la supression des enfants d'un QObject se fait automatiquement à la suppression du QObject père.
    Tu passes this comme pointeur sur le parent en général. A la supression de this (enfin, de son instance, on est d'accord qu'un this ne se delete pas ;)), tout les enfants de cette instance seront supprimés.

    C'est entièrement géré par Qt ça.
  • Justement, il veux des widgets pop-up ( je suppose donc flottant )
    Le fait de donné un parent à ces widget, voudra dire qu'il doivent etre inserés dans le parent comme widget, et ce n'est pas à mon avis ce qu'il souhaite ;)

    P@sNox,
  • He oui c'est bien des widgets flottants, je vais tester ton Qt::WA_DeleteOnClose , merci
  • Ok c'est bien çà, par contre je vois pas pourquoi c'est pas une option par défaut...
    Merci
  • Par ce que tout simplement dans ( presque ) tout les langages , close() ne veut pas dire destruction de la fenetre, mais simplement cacher la fenetre ( hide() ).

    P@sNox,
  • Mouais, quand tu fermes une Qmainwindow, ca parait logique d'appeler le destructeur quand même...
  • Pas forcément. Tu peux vouloir afficher une autre boîte de dialogue derrière, comme un login par exemple.
Connectez-vous ou Inscrivez-vous pour répondre.