IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Widget dans un layout : lui donner un parent ou pas ?

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Par défaut Widget dans un layout : lui donner un parent ou pas ?
    Bonjour,

    Je suis actuellement en train d'apprendre Qt et je me pose cette question : quand je crée des widgets que je vais placer dans des layouts je ne leur donne pas de widget parent (en dernier paramètre du constructeur) et mon application fonctionne bien. La page principale utilise bien sur ce layout.

    Mais quand je leur donne un "parent" (widget conteneur donc) cela marche aussi, ça ne change visiblement rien à l'exécution du programme.

    Donc je me demandais si cela est utile de leur donner un widget parent ? Si oui pourquoi donc ?
    Est ce que un layout, lorsqu'on lui donne des widgets à contenir joue le role de widget parent implicitement ? Après tout c'est bien un conteneur de widget.

    Voilà les questions que je me pose et j'espère que vous prendrez le temps d'y répondre . Même si je n'ai pas d'erreurs dans un cas comme dans l'autre cela me dérange de ne pas savoir ce que je fais.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Un petite recherche sur le forum aurait pu t'aider.

    En gros, le système enfant parent de Qt permet d'éviter de devoir appeler soit même delete sur les enfants, c'est fait automatiquement lors de la destruction du parent. Pour définir un widget comme étant un enfant d'un autre widget, il faut : mettre le parent dans le constructur ou appeler setParent ou mettre dans un layout (qui appelle setParent).

    Bonne continuation

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Par défaut
    Merci pour cette réponse mais en fait ça ne répond pas à ma question. J'avais effectivement lu que Qt se chargeait de faire les delete sur les widgets enfants à notre place. Justement ce que je me demande c'est dans le cas ou on ne donne pas de parent à un widget mais qu'on le place dans un layout. Le layout étant ensuite utilisé par la fenêtre principale.

    Ce que je souhaiterai savoir c'est si le layout joue automatiquement le rôle de widget parent pour les widgets qu'il contient.
    Inversement le layout, lorsqu'il est utilisé par une page, est il considéré comme un widget enfant de cette page (automatiquement) ? Ou faut il le préciser dans son constructeur ?

    Cela fait en fait 2 questions que je pose en même temps, mais qui sont liées je trouve.

    Merci de m'aider. J'espère avoir suffisamment bien expliqué mes 2 questions.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    J'avais bien compris la question... ça répond pas ?
    Citation Envoyé par gbdivers Voir le message
    mettre dans un layout (qui appelle setParent)
    Sinon, un layout n'est pas un wiget

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Par défaut
    Si en effet ça répond. J'avais oublié qu'un layout n'était pas un widget... mais un layout !

    Donc je résume pour voir si j'ai bien compris : si on donne des widgets au layout et que le layout a pour parent la fenêtre alors tout les widgets contenus dans le layout seront considérés comme enfant de la fenêtre ?

    Donc quand je crée un layout je spécifie son parent dans le constructeur ?
    (EDIT : ou j'appelle setParent() par la suite)

    Merci de me dire si j'ai bien compris^^


    EDIT : Après réflexion c'est évident que j'ai compris je viens de réecrire la réponse qui m'a été donnée Merci bien et bonne soirée !

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    salut,

    En fait, tu as une relation "bi directionnelle" entre la classe layout et la classe widget :
    • un widget peut contenir de 1 et 1 seul layout (créé par défaut lorsque le widget est créé)
    • un layout peut contenir de 0 à N widget (N étant un nombre plus ou moins inconnu dont la seule limite est celle du système )
    • un layout peut appartenir à 0 à 1 widget (en fonction du constructeur que tu auras invoqué pour ton layout)
    Quand tu place ton widget dans un layout, c'est le layout qui va prendre la responsabilité de la destruction du layout au moment où le layout sera détruit.

    La fonction parentWidget() du widget renverra NULL parce que... bah, y a plus de widget responsable de ton widget

    De même, quand tu place un layout dans un widget (que ce soit en invoquant le constructeur qui va bien ou en invoquant widget->setLayout() ), c'est le widget qui prendra la responsabilité de la destruction du layout.

    Tu pourras d'ailleurs récupérer le widget qui contient le layout par la fonction parentWidget() de ton layout (qui renvoie NULL tant que le layout n'appartient à aucun widget)

    Quand le widget qui a la responsabilité du layout sera détruit, il détruira le layout qui se chargera de détruire les widget qu'il contient, et la boucle sera bouclée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Par défaut
    De même, quand tu place un layout dans un widget (que ce soit en invoquant le constructeur qui va bien ou en invoquant widget->setLayout() ), c'est le widget qui prendra la responsabilité de la destruction du layout.

    Quand le widget qui a la responsabilité du layout sera détruit, il détruira le layout qui se chargera de détruire les widget qu'il contient, et la boucle sera bouclée


    C'est exactement ce que j'étais maintenant en train de me demander. Parfait j'ai eu toutes les réponses que je voulais. Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/01/2012, 16h44
  2. Réponses: 1
    Dernier message: 03/02/2010, 18h02
  3. Problème de placement des widgets dans un layout
    Par maroua_mm dans le forum Qt
    Réponses: 1
    Dernier message: 20/08/2009, 15h16
  4. [JLabel]Lui donner la taille occupée par le texte
    Par Pill_S dans le forum Composants
    Réponses: 20
    Dernier message: 12/03/2005, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo