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 :

Parcourir les boutons créés dynamiquement pour les supprimer

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Points : 44
    Points
    44
    Par défaut Parcourir les boutons créés dynamiquement pour les supprimer
    Bonjour,

    comment puis-je supprimer des boutons qui ont été créés dynamiquement ?

    L'idéal serait de parcourir tous les Widgets de la fenêtre et, en fonction de leur nom (ex : commençant par "btn"), les supprimer via 'delete'.
    Mais, je ne sais pas vraiment comment faire du côté du code !

    Par avance, merci.

    Nuclear.

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    En supposant que vous parlez de programmation Qt avec des widgets C++ et non en QML, on peut faire cela assez simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (QObject *child, windowPtr->children())
        if (qobject_cast<QWidget *>(child) && child->objectName().startsWith("btn"))
            child->deleteLater();
    Il s'agit d'une boucle qui parcourt les enfants de la fenêtre windowPtr (pouvant par exemple être remplacé par "this" s'il s'agit de la classe appelante). Si l'enfant concerné est un widget (cast en QWidget* possible) et que son objectName commence par "btn", alors on le supprime avec deleteLater(). Vous aurez peut-être besoin de faire une récursion si vos boutons ne sont pas des fils de la fenêtre mais par exemple des petits-fils. Par exemple, si la fenêtre contient un layout qui contient un bouton, le bouton n'est pas un fils direct mais un petit-fils, tandis que le layout est un fils. Dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void MyClass::removeButtons()
    {
        recurseRemoveButtons(windowPtr);
    }
     
    void MyClass::recurseRemoveButtons(QObject *parent)
    {
        if (!parent)
            return;
     
        foreach (QObject *child, parent->children())
        {
            recurseRemoveButtons(child);
            if (qobject_cast<QWidget *>(child) && child->objectName().startsWith("btn"))
                child->deleteLater();
        }
    }
    J'ai écrit ça comme ça, mais c'est censé marcher.

    Bonne soirée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Il est aussi possible d'utiliser la méthode findChildren.

Discussions similaires

  1. gérer les méthodes de clic pour les boutons
    Par étudiante_info dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 28/03/2011, 14h13
  2. Réponses: 7
    Dernier message: 23/09/2009, 10h02
  3. Réponses: 0
    Dernier message: 21/09/2009, 23h41
  4. Supprimer tous les labels créés dynamiquement d'un control
    Par MiXinG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/05/2009, 11h48
  5. Réponses: 20
    Dernier message: 19/12/2004, 18h52

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