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 :

Qt et les tableaux


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Par défaut Qt et les tableaux
    Bonjour,
    J utilise souvent les tableaux en programmation.
    Par exemple, j'utilise parfois CelluleTableau[x][y] ou x et y sont les 2 dimentions du tableau.
    Cest tres pratique ca permet d accéder directement a la valeur stockée dans la cellule (x,y).
    Je voudrai rajouter une autre dimension qui serait ne n° du tableau, en partant du principe que j'ai plusieurs tableau à 2 dimensions.
    Pour résumer ca donnerait ceci CelluleTableau[n°tableau][x][y]
    Mais j imagine que cela ne se fait pas comme ça...
    Quelqu'un peut il me donner une piste de travail? Je ne vois pas trop comment faire, car visiblement CelluleTableau[n][x][y] ne doit pas fonctionner.
    Merci
    Edit:
    Précision, le but est de gérer des tableaux de listes de matériel que je reçois au format csv. Je sais récupérer les données de ces tableaux, ce n'est pas un soucis. par contre je dois garder en mémoire tous les tableaux que je selectionne. Les tableaux ont un nombre de lignes variables, mais un nombre de colonnes fixe. Je dois avoir une vingtaine de tableau.
    ex:
    tableau 1 : différents outils sur le chantier 1 (colonnes : type outils, marque, type, numerodeserie, nombre utilisé,nombre dispo, etc etc)
    tableau 2 : differents outils sur le chantier 2 (colonnes : type outils, marque, type, numerodeserie, nombre utilisé,nombre dispo, etc etc)
    tableau 3 : differents outils sur le chantier 3 (colonnes : type outils, marque, type, numerodeserie, nombre utilisé,nombre dispo, etc etc)
    etc... (Précision il suffit que je récupère des QString, pas besoin de int ou autre)
    Le but de ma question est de savoir quel est le moyen le plus rigoureux de traiter ce problème (QStringList, QList, QVector, QMap, QTable... etc, etc)
    Merci

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 65
    Par défaut
    Il y a possibilité en mettant des tableaux les uns dans les autres :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QList<QList<QList<QString> > > outils; // Ne pas oublier de mettre des espaces entre les >
    Bon, c'est quand même pas super génial comme soluce. Essayons de travailler un peu sur cette solution.

    Si les outils ont toujours la même structure, on peut les stocker dans une structure :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct Outil {
        QString nom;
        QString marque;
        QString type;
        int nombreUtilise;
        int nombreDispo;
    }
     
    QList<QList<Outil> > listeOutils;

    C'est déjà un petit peu plus propre (à mon gout, certains diront sûrement que la première marche et suffit, mais c'est bon d'avoir des possibilités supplémentaires)

    Ou alors, se créer un QTableModel personalisé chrageant les données dans le csv (c'est propre, sympatique, économise la mémoire), et stocker ces QTableModel dans un tableau :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class ModeleDOutils : public QTableModel {
        // Implémentation du modèle
    }
     
    // ...
     
    QList<ModeleDOutils> outils;

    Ou même, parti comme cela, carrêment un QTreeModel. Ca doit aussi marcher. Après, tout dépend des demandes précises, des connaissances, du temps, de l'appreciacion "sale"...

    Ce sont des idées, je dis pas qu'il y a de "meilleure solution" (on ne peut savoir qu'en connaissant parfaitement le projet, et encore...), ni que ce sont les seules.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    La solution de Der Drachen est beaucoup mieux que d'utiliser des tableaux de tableaux de tableaux

    Tu peux même aller plus loin (à priori) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Outil {
        QString le_chantier_correspondant;
        QString nom;
        QString marque;
        // le reste des colonnes
    };
     
    QList< Outil > listeOutils;
    Pour la question de QVector ou QList (oublie QStringList dans ce cas ; Et QTable, c'est dans Qt3 ), tout dépend de comment tu lis tes données, les opérations que tu dois effectuer sur tes données, etc.

  4. #4
    Membre confirmé
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Par défaut
    Merci a vous deux pour vos réponses.
    Je pensais effectivement que des tableaux de tableaux c 'était tres moyen d'où mon post(le but était de faire cela de la manière optimale).
    Vos réponses m'ont bien aidé, je vais maintenant en tenir compte pour le développement.
    Je n'ai pas trouvé de doc concernant les QTableModel et QTreeModel ...donc je vais plutôt utiliser cette solution qui me parrait assez simple effectivement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct Outil {
        QString nom;
        QString marque;
        QString type;
        int nombreUtilise;
        int nombreDispo;
    };
     
    QList<QList<Outil> > listeOutils;
    Le but étant de pouvoir avoir un accès aléatoire en lecture aux données.

    Dernière question, quelle est la syntaxe correcte pour lire par exemple dans le tableau 2, la marque de l outil présent en ligne 5 ? (je sais lire une QListe simple par exemple en utilisant Valeur=nomdeQListe.at(2) mais pas une QListe de Qliste) Doit on faire le code suivant ou y a t il plus simple?
    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
    struct Outil {
        QString nom;
        QString marque;
        QString type;
        int nombreUtilise;
        int nombreDispo;
    };
     
    QList<QList<Outil> > listeOutils;
     
    QList MonTableau;
    Outil MonOutil;
    QString MaMarque;
     
    MonTableau = listeOutils.at(1); // devrait stocker le contenu du tableau 2
    MonOutil = MonTableau.at(4); //devrait stocker le contenu de la ligne 5 du tableau 2
    MaMarque = MonOutil.marque; // A ce stade je devrais avoir le résultat dans MaMarque.
    Est ce correct, ou dois je faire autrement?

    Merci encore.

    PS : Je suis preneur pour un peu de doc sur les QTableModel et QTreeModel...

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 65
    Par défaut
    Pour l'accès aux données, tu peux le faire en passant de variable en variable, ou directement en une seule ligne :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QString marque = listeOutils.at(1).at(4).marque

    Si tu est sûr(e) de la présence des données aux indexs, tu peux même utiliser l'operateur [] (quoique jamais testé en multi-dimensionnel, je suis toujours resté à la première dimension )
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QString marque = listeOutils[1][4].marque

    La différence entre [i] et at(i), c'est que si l'index i n'existe pas, [i] le créera, pas at(i).

    Sur le QTableModel ou QTreeModel, il faut dériver des classes QAbstractTableModel ou QAbstractItemModel. Bon, la technique est plus compliquée, mais dans certains cas pourra être plus adaptée (par exemple, afficher les outils dans un QTableView ou QTreeView). J'vais pas recopier la méthode complète, mais je conseille la lecture de l'informations sur ces classes (et bases) dans la doc Qt.

  6. #6
    Membre confirmé
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Par défaut
    Merci,
    Précieux conseils intégrés dans mon code et ça fonctionne
    C'était très clair.
    Merci encore à vous deux.

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

Discussions similaires

  1. Mais pourquoi ... Avec IE les tableaux sont décentrés ?
    Par nebule dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/11/2004, 10h04
  2. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  3. Réponses: 14
    Dernier message: 01/09/2003, 22h46
  4. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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