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 :

Gestion des évènements d'un QLayout

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Par défaut Gestion des évènements d'un QLayout
    Bonsoir tout le monde,

    je reviens sur un problème un peu similaire à mon précédent (la création d'un layout personnalisé), mais il s'agit de la gestion des évènements d'un Layout, mon problème c'est que je n'arrive pas à trouver la fonction ResizeEvent qui gère le redimensionnement, pour l'assigner à mon conteneur (layout), et je pense que la réponse vient de l'héritage de la classe de base QLayout, celle-ci hérite directement de QObject et non pas de QWidget contrairement à la classe QMainWindow qui hérite de ce dernier si mon analyse est bonne, à moins d'avoir dit une grosse connerie ?

    Voici la méthode à laquelle je fais référence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void QMainWindow::resizeEvent(QResizeEvent *event);
    Ma question est donc; comment pourrais-je avoir une telle méthode dans une classe qui hérite de QLayout ? J'ai pensé à l'héritage multiple (QLayout + QWidget), est-ce faisable ? Merci pour toutes vos réponses !


    Remarque : la méthode setGeometry() de QLayout permet en grande partie de réaliser ça mais elle n'est pas synchrone.

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    Le rôle d'un layout est d'agencer automatiquement les tailles et positions des widgets qu'il contient, il n'envoie pas de signaux.
    Ce sont les QWidgets qui gèrent les redimensionnements.
    Cela dit un layout n'est jamais seul, il doit être contenu dans un Widget (QMainWindow ou autre) pour exister.
    Si tu veux un signal de redimensionnement global, tu devrais regarder du côté du conteneur.

  3. #3
    Membre confirmé
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Par défaut
    Bonsoir, et merci avant tout pour tes réponses, j'avoue ne pas y avoir pensé, mais il reste tout de même un problème :

    -Mon Layout est crée de manière à ce que les composants soient placés en fonction du Layout lui même et non pas d'un contenu par rapport à un autre. Donc pour ta 1ere réponse celle des widgets c'est mort je crois.

    -Maintenant pour la solution du conteneur j'aurais une question à te poser, s'il te plait, comment pourrais-je savoir si le conteneur à été redimensionné si ce dernier ne reçoit mon layout qu'après sa création avec la méthode suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monConteneur.setLayout(monLayout);
    Merci !

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Citation Envoyé par guatto Voir le message
    comment pourrais-je savoir si le conteneur à été redimensionné si ce dernier ne reçoit mon layout qu'après sa création
    Eh bien si le signal de redimensionnement a été déclaré et connecté auparavant, il va être émis tout simplement.

  5. #5
    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,

    De toute évidence, tu as "tout simplement" oublié un point essentiel en Qt : le système parent / enfants.

    En effet, "toute la machinerie interne" de Qt se base sur ce que l'on appelle le système "parent/enfant", dans le sens où un widget (ou même, de manière bien plus générale un objet) est forcément soit l'enfant d'un autre objet / widget, soit le parent d'un (voir de plusieurs) enfant(s). Et, bien sur, ces situation ne sont pas exclusives, car un objet particulier peut aussi bien être l'enfant d'un autre objet tout en étant lui-même le parent d'un ou de pluiseurs autre(s) objet(s).

    L'un des principaux avantages de ce système, c'est que, comme les parents sont responsables de leurs enfants, lorsque l'on détruit un parent, on s'assure également que tous ses enfants (et tous les enfants de ses enfants, et on pourrait continuer à parler d'enfants jusqu'aux calendes ) seront détruits.

    Mais l'un des autres aspects les plus frappant, c'est que, comme un objet "parent" connait systématiquement tous ses enfants (et que, dans l'autre sens, tous les enfants connaissent systématiquement leur parent), la "machinerie interne" permet au parent de communiquer "à tous ses enfants" tout ce qui peut les intéresser, et, dans l'autre sens, permet également aux enfants de communiquer à leur parent tout ce qui pourrait l'intéresser.

    Ainsi, lorsque tu vas redimensionner ta fenêtre, le système parent va automatiquement signaler au layout qu'elle contient qu'elle a été redimensionnée. Comme le layout ne sait pas en faire grand chose, il va "transmettre" l'info à ses propres enfants (très souvent, ce seront des widgets, mais pas que), en prenant soin d'adapter les valeurs sur base de critères bien établis.

    Les quels widgets pourront à leur tour "faire passer l'info" à leur propre layout, qui pourra, lui aussi, la transmettre à ses propres enfants, et ainsi de suite.

    Et le simple fait d'avoir, à un moment donné, écrit la ligne setLayout(monLayoutAMoi); ou monLayoutAMoi->addWidget(telWidgetSympaEtNecessaire); suffit à intégrer tous les éléments que tu crées toi-même dans le système parent/enfants. Avoue que c'est génial, non
    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

  6. #6
    Membre confirmé
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Par défaut
    Merci à tout le monde pour votre aide, problème résolu !

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

Discussions similaires

  1. [XML] [EXPAT] xml_parse et la gestion des événements...
    Par Herode dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/02/2006, 20h59
  2. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  3. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  4. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

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