J'ai créer une zone centrale pour une application a l'aide de QMdiArea. J'y insère un widget plusieurs fois et je voudrais savoir comment faire pour pouvoir décompter le nombre de widget que j'ai insérer. Le but est de limiter le nombre de widget à deux, pour l'instant j'ai créer un entier qui incrémente à chaque fois que je créer un widget et je me demandais si il n'y avait pas quelque chose de mieux à faire.
Tu peux aussi placer les widgets dans une collection quelconque (mettons : std::vector ou QList), en gardant à l'esprit le fait que ce n'est pas cette collection qui a droit de vie et de mort sur tes widgets.
De cette manière, tu "n'auras qu'à" demander la taille de la collection pour savoir... combien d'éléments se trouvent dedans
L'avantage, c'est que tu cette colletion te permettra d'accéder sans doute plus facilement aux différents widgets qu'elle contient
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Je vais un peu plus loin, je dérive une classe de base de la subwidget, pour juste lui définir un comportement à adopter lorsque l'utilisateur ferme la fenêtre avec la croix, j'ai deux comportement possibles, le premier est le comportement normal, avant de détruire effectivement la fenêtre, j'active un signal que ma fenêtre principale va utiliser pour retirer la fenêtre en question de sa liste. Dans l'autre cas, je ne détruis pas la fenêtre, je me contente de simplement la cacher, donc visuellement elle n'existe plus mais dans les faits elle est toujours là, donc elle ne doit pas sortir de ma liste . Cette surcharge me permet également de savoir si un exemplaire existe déjà et donc plutôt que d'en créer une nouvelle, resservir l'ancienne, ce qui me donne un petit gain en performance et me demande moins de ressources.
La liste des enfants d'un QObject est accessible via QObject::children. Ta MdiArea devrait contenir que tes widgets je pense, donc tu peux probablement ecrire :
mdiArea->children().size()
Pour avoir le nombre de widgets.
(Par contre, si ta mdiArea contient d'autres QObject, il faudra creer une seconde liste, comme proposer par koala, ou compter directement dans la liste children() en filtrant que les QWidget)
@int21h
C'est plutot un comportement de la mdi area, donc c'est cette classe qu'il faudrait dériver a mon avis. Pas les subWindow.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.