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 :

addTab de QTabWidget pose problème


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut addTab de QTabWidget pose problème
    Bonjour à tous,

    Petit problème avec QTabWidget, voici mon code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    void MaClasse1::recherche(QList<QList<QString> > list)
    {
         tabWidget->clear();
     
         maclass2= new MaClasse2;
         QList<MaClasse2*> listView;
         QList<QString> listTitre;
     
         for(int i=0; i<list.count(); i++)
         {      
               QString titreTabWidget;    
               titreTabWidget = "Lot N°";
               titreTabWidget += list.value(i).value(2);
               listTitre.append(titreTabWidget);
     
               for(int j=0; j<list.value(i).count(); j++)
               {
                   maClasse2->setValues(list.value(i));
               }
     
               listView.append(maClasse2);
         }
     
         for(int k=0; k<listView.count(); k++)
         {
                 qDebug()<<"passage dans boucle"; //ici j'ai bien plusieurs passages
               QString s = listTitre.value(k);
               tabWidget->addTab(listView.value(k), s); //création d'un onglet pour chaque valeur de k.
         }
     
         tabWidget->setCurrentIndex(0);
    }
    Avec ce code, je n'ai qu'un onglet de créé (le dernier de la listView) avec la fonction "addTab".

    Je vois pas ce qui cloche avec ma liste de pointeurs vers MaClasse2, est-ce qu'il y a quelque chose qui m'échappe ?

    Merci d'avance.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for(int i=0; i<list.count(); i++)
         {      
               QString titreTabWidget;    
               titreTabWidget = "Lot N°";
               titreTabWidget += list.value(i).value(2);
               listTitre.append(titreTabWidget);
     
               for(int j=0; j<list.value(i).count(); j++)
               {
                   maClasse2->setValues(list.value(i));
               }
     
               listView.append(maClasse2);
         }
    tu ajoute list.count() la même instance de maClasse2 dans liste.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Ah ok,

    Je vois, j'avais fais une grosse boulette. Bon du coup ce code était destiné à simplifier l'ancien mais je sais pas si ça marchera
    On verra

    Merci beaucoup en tout cas et à bientôt!

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Somato Voir le message
    Bon du coup ce code était destiné à simplifier l'ancien mais je sais pas si ça marchera
    pourquoi passer par une listView et faire une for aprés??
    La première boucle suffit à mon avis

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Ah oui attention, c'est pas une QListView mais une QList que j'ai appeler listView sans faire attention (j'ai pris ce qui me venait en tête sur l'instant, je sais pas si tu avais confondu du coup, mais bref, c'est dit).

    En fait, j'ai poster un sujet sur le forum C++ pour une aide sur la gestion de plusieurs instances courantes, au début j'avais ce code ci :

    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
    18
    19
    20
    void MaClasse2::recherche(QList<QList<QString> > list)
    {
         tabWidget->clear();
     
         for(int i=0; i<list.count(); i++)
         {
               maClasse2= new MaClasse2;  
               QString titreTabWidget;
               titreTabWidget = "Lot N°";
               titreTabWidget += list.value(i).value(2);
     
               for(int j=0; j<list.value(i).count(); j++)
               {
                   maClasse2->setValues(list.value(i));
               }
     
               tabWidget->addTab(maClasse2, titreTabWidget);
         }
         tabWidget->setCurrentIndex(0);
    }
    Ce qui fonctionnait très bien niveau affichage, je ne n'arrivais pas à retrouver mes instances courante pour gêrer mes sauvegarde (exception faite de la dernière instance crée dans la boucle).
    Sur le forum C++, on m'a demandé pourquoi je ne passais pas par une liste de mes instances, donc j'ai imaginé le premier script (sans savoir si j'ai bien suivit les conseils qu'on m'a donné...).

    Donc j'ai fait de listView un argument privé de MaCLass1, et pour retrouver mes données affichées (modifiable à souhait par l'utilisateur), j'ai juste à faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return listView.value(tabWidget->currentIndex())->fonctionDeSauvegardeDeTousMesWidget();
    Bon, je suis content parce que ça marche mais évidement je veux bien croire que j'ai pas choisis le chemin le plus court. Mais si quelqu'un à des exemples d'amélioration de mon code c'est pas de refut.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Somato Voir le message
    je ne n'arrivais pas à retrouver mes instances courante pour gêrer mes sauvegarde (exception faite de la dernière instance crée dans la boucle).
    Sur le forum C++, on m'a demandé pourquoi je ne passais pas par une liste de mes instances, donc j'ai imaginé le premier script (sans savoir si j'ai bien suivit les conseils qu'on m'a donné...).
    ...
    Donc j'ai fait de listView un argument privé de MaCLass1, et pour retrouver mes données affichées (modifiable à souhait par l'utilisateur), j'ai juste à faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return listView.value(tabWidget->currentIndex())->fonctionDeSauvegardeDeTousMesWidget();
    Bon, je suis content parce que ça marche mais évidement je veux bien croire que j'ai pas choisis le chemin le plus court. Mais si quelqu'un à des exemples d'amélioration de mon code c'est pas de refut.
    Ca ne correspond pas au code que tu nous a montré

    Tu peut te passer de cette liste, vue comment tu t'en sert, en utilisant ces fonction :

    http://qt.developpez.com/doc/latest/...#currentWidget
    http://qt.developpez.com/doc/latest/...et.html#widget

    Le gros problème avec ta liste et si l'utilisateur à modifier par un drag&drop l'ordre de tes tab
    Un autre, est que ta widget est référencé par ta list et par QTabWidget sans aucune protection. Et le partage de pointeur de cette manière est souvent sources de bug. exemple :
    clear non prévue sur tabWidget => la liste contiens toujours les pointeur => Qt détruire ces widgets => les pointeur son invalide => accés par la list à un élément => erreur mémoire => état indéfinie de ton programme => forte probabilité de crash

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

Discussions similaires

  1. CFormView::OnIntialUpdate() pose problème
    Par jacklafrip dans le forum MFC
    Réponses: 1
    Dernier message: 26/09/2006, 15h37
  2. caractère \ pose problème
    Par questionneuse dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/07/2006, 16h25
  3. Un cast de SmartPointer qui pose probléme
    Par Higestromm dans le forum C++
    Réponses: 3
    Dernier message: 13/10/2005, 10h25
  4. jointure externe avec un where, me pose problème!
    Par Danae dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2005, 17h37
  5. Réponses: 3
    Dernier message: 17/05/2005, 11h16

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