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

Qt Discussion :

Remplacer un widget par un autre


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut Remplacer un widget par un autre
    En fait,
    Mon interface se compose un layout (horizontal layout) qui est constitué d'un treeview et d'un widget "modulewidget" et je veux que lorsque je clique sur un menu ce "modulewidget" disparait et prend sa place un nouveau widget.
    Comment dois-je procéder?
    Est ce que je dois supprimer le layout et recréer un autre afin de lui assigner le treeview et le nouveau widget?

  2. #2
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Je dirais un QLayout::removeWidget(QWidget*), et un hide() ou deleteLater() sur le widget (si tu veux le cacher ou le supprimer), puis ajoute le nouveau widget au layout.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut
    Merci pour l'information.
    Mais je dois écrire un code qui me permet de trouver la liste de widgets présents de layout afin de les supprimer et les remplacer par un nouveau widget.
    J'ai essayé mais ça ne marche pas avec ce code.
    Je ne sais pas où réside l'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QList<QWidget *> widgets = console->ui.horizontalLayout->findChildren<QWidget *>();
    	for (int i=0;i<widgets.size();i++)
    	{
    	console->ui.horizontalLayout->removeWidget(widgets.at(2));
    	}
    	console->ui.horizontalLayout->removeWidget(console->ui.widget);
    	console->ui.horizontalLayout->addWidget(this->ids.widget);
    	console->ui.centralwidget->setLayout(console->ui.horizontalLayout);

  4. #4
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console->ui.horizontalLayout->removeWidget(widgets.at(2));
    => pourquoi 2 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    console->ui.horizontalLayout->removeWidget(console->ui.widget);
    console->ui.horizontalLayout->addWidget(this->ids.widget);
    => que sont console->ui.widget et this->ids.widget ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console->ui.centralwidget->setLayout(console->ui.horizontalLayout);
    => pourquoi redéfinir son layout? A-t-il changé entre temps?

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut
    En fait dans mon layout j'ai au début un treeview et widget "ui.widget".
    Lorsque je clique sur un menu je dois enlever "ui.widget" et le remplacer par un autre widget "ids.widget" provenant d'un autre projet.
    Je dois redéfinir un layout après avoir ajouté un nouveau widget.
    en fait j'ai réussi avec le code suivant à effacer les widget:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QLayoutItem *child;
    	    while ((child = console->ui.horizontalLayout->takeAt(0)) != 0)
    	    {
    	        child->widget()->deleteLater();
    	        delete child;
    	    }
    	console->ui.horizontalLayout->invalidate();
    Mais je n'arrive pas à conserver le treeview dans ce cas

  6. #6
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Ne devrais tu pas stocker le widget "courant" dans une variable membre ?

    exemple :

    .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QWidget * widgetCourant; //Conserve l'adresse du widget affiché
    .cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Retrait de widget
    if(widgetCourant )
        widgetCourant->deleteLater();
     
    //Ajout de widget
    //Création/Récupération du nouveau widget appelé newWidget (ton this->ids.widget, par exemple)
    widgetCourant = newWidget ;
    console->ui.horizontalLayout->addWidget(widgetCourant);

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    QLayoutItem *child;
    	child = console->ui.horizontalLayout->takeAt(1);
     
    	child->widget()->deleteLater();
    	delete child;
     
    	console->ui.horizontalLayout->invalidate();
    	console->ui.horizontalLayout->addWidget(this->ids.widget);
    	console->ui.centralwidget->setLayout(console->ui.horizontalLayout);
    De problème à un autre...
    Maintenant avec le code ci desssus j'affiche le ui.treeView au milieu de horizontal layout et celui ids.widget n'apparait pas.

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

Discussions similaires

  1. [ms-dos] remplacer un mot par un autre
    Par Spidermeu dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 28/07/2006, 11h57
  2. Réponses: 9
    Dernier message: 22/05/2006, 12h21
  3. Remplacer un mot par un autre dans un fichier
    Par vbcasimir dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2006, 12h08
  4. [VB.NET] Comment remplacer une couleur par une autre?
    Par jazz matazz dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/02/2006, 14h29
  5. Remplacer un texte par un autre
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 24/11/2005, 00h40

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