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 :

QTableWidget : lister des fichiers

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Par défaut QTableWidget : lister des fichiers
    Bonjour,

    Encore moi malheureusement
    En effet je me heurte encore a de nombreux soucis en effet je tente de mettre en place un QTableWidget afin d'afficher la liste d'un répertoire :


    tout d'abord voici la fonction prise de developpez.com pour lister les fichier :

    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
     
    ]// On sélectionne le répertoire à partir duquel on va rechercher les fichiers AVI et MP3
        QString selectDir = ui->lineEdit->text();
     
        // On remplit une QStringList avec chacun des filtres désirés ici "*.mp3" et "*.avi".
        QStringList listFilter;
        listFilter << "*.mxf";
        listFilter << "*.xml";
     
        // On déclare un QDirIterator dans lequel on indique que l'on souhaite parcourir un répertoire et ses sous-répertoires.
        // De plus, on spécifie le filtre qui nous permettra de récupérer uniquement les fichiers du type souhaité.
        QDirIterator dirIterator(selectDir, listFilter ,QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
     
        // Variable qui contiendra tous les fichiers correspondant à notre recherche
        QStringList fileList;
        // Tant qu'on n'est pas arrivé à la fin de l'arborescence...
        while(dirIterator.hasNext())
        {
            // ...on va au prochain fichier correspondant à notre filtre
            fileList << dirIterator.next();
        }
    Ensuite voila je souhaiterait mettre en place un QTableWidget qui afficherait la liste des fichier avec comme information leur nom , leur taille et leur type puis par la suite d'autre information cependant je sais déjà pas si une QtableWidget est tellement adapté a ma situation en sachant que je ne veut rien modifier dans ce tableau puisque c'est seulement a titre purement indicatif et informatif

    Voici un aperçu du design


    je souhaiterais juste que lors que le lineEdit m'indique un répertoire que je liste les fichier présent dans le QTablewidget

    liens vers la doc : http://qt.developpez.com/doc/4.7/qtableview/
    Je n'arrive pas a trouver de fonction qui puisse réellement m'aider :s

    Connaîtriez vous un tutoriel ou une façon de faire afin de remplir ce un tableau comme celui ci ?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut qtablewidget
    Le qtablewidget t'affiche 1 tableau contenant des cellules un peu comme Excel. Regardes plutôt du coté de QTreeWidget,je pense que c'est plus adapté.tu peux gerer comme une arborescence. Il y aussi qlistwidget.Au choix selon ce que tu veux faire.

    Il te reste à récupérer les noms de fichiers
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Par défaut
    Bonjour tout d'abord merci de ta réponse

    cependant l'utilisation d'un QTreeWidget ne me permettra d'avoir que des information sur les fichier c'est a dire Taille , Chemin , poids

    En outre je voudrait avoir en plus de ces informations des informations que je vais par la suite extraire d'un fichier XML c'est a dire UUID , Hash , et des information que je vais calculer , l'utilisation d'un QTreeWidget me permet t'il d'implementer des donnée supplémentaire autre que celle des information classique d'un fichier ?

    Merci encore
    Bonne soirée
    D.S

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut infos fichiers
    Pour qtablewidget,qtreewidget,etc.. ce ne sont que des conteneurs pour l'affichage.

    Si tu cherches les fonctions pour obtenir les infos sur les fichiers regardes du coté de QFileInfo.

    Pour manipuler des fichioers XML, tu as QDomDocument ou SAX ( 2 façons différentes d'accéder au contenu d'un fichier XML )

    Par contre pour le type de fichier je ne sais pas. Tu peux récupérer l'extension mais si tu n'es pas sous Windows ce n'est pas valable. Sans passer par les extensions,je sais pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 37
    Par défaut
    Encore merci

    J'ai fnalement trouver ma solution concernant le XML

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    void Test::Extracthash()
    {
        QDomDocument doc;
        QFile file("/home/testuser/Bureau/seb/test.xml");
        if(!file.open(QIODevice::ReadOnly)) // Si l'on n'arrive pas à ouvrir le fichier XML.
        {
            qDebug()<<"Erreur à l'ouverture du document XML";
            return;
        }
        // Ajoute le contenu du fichier XML dans un QDomDocument et dit au QDomDocument de ne pas tenir compte des namespaces
        if (!doc.setContent(&file,false)) // Si l'on n'arrive pas à associer le fichier XML à l'objet DOM.
        {
            file.close();
            qDebug()<<"Le document XML n'a pas pu être attribué à l'objet QDomDocument.";
            return;
        }
     
        // Ici, racine pointe sur l'élément <PackingList> de notre document
        QDomElement racine = doc.documentElement();
     
        // Ici, racine pointe sur une fils de <PackingList> c'est à dire <AssetList>
        racine = racine.firstChildElement("AssetList");
     
        // Ici, racine pointe sur une fils de <AssetList> c'est à dire <Asset>
        racine = racine.firstChildElement("Asset");
     
     
        while(!racine.isNull())
        {
     
            // Si on pointe sur un élément de type <Asset>
                if(racine.tagName() == "Asset")
                {
                    // On récupère le premier enfant de l'élément Asset c'est a dire <nom> ou <url>
                    QDomElement Hashage = racine.firstChildElement("Hash");
                    QDomElement Nom_fic = racine.firstChildElement("OriginalFileName");
                    // Si l'enfant de l'élément site est l'élément <Hash>
                    if(Hashage.tagName() == "Hash")
                    {
                        // On récupère le texte contenu dans la balise <nom>
                        QString strhash = Hashage.text();
                        QString strnom  = Nom_fic.text();
                         qDebug()<<strhash;
                         qDebug()<<strnom;
                     }
     
                  }
           racine = racine.nextSiblingElement();
     
          }
     
        file.close();
    }
    j'arrive bien a afficher ce que je souhaite cependant je me pose un enorme question c'est au niveau du stockage en effet les Hash et nom de fichier que j'extrait devront par la suite être comparé a des hash calculé avec les même nom de fichier

    je m'explique mon logiciel va réaliser une copie d'un répertoire, le fichier XML donc j'extrais les informations contient le nom_des fichier , les hashs de chaque fichier , mon logiciel va calculer le hash de chaque fichier également afin de le comparer avec l'extraction XML cependant j'ai du mal a concevoir d'une part la façon dont je pourrais faire pour comparer les extractions de mon ficheir XMl avec les hash calculé pour chaque fichier dans mon programme ....

    J'ai le cerveau tout emmêlés ..

    Partie 2 :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    EDIT 3 :
    
    Ne nous égarons pas quand même et revenons au fond au problème :calim2:
    en effet je tente d'afficher une arborescence deja pour commencer donc pour cela je tente 
    cette fonction légerement modifier mais dans la doc 
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011121314151617181920212223242526272829303132333435363738394041424344
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678
     
    void Interface::on_tableView_clicked(const QModelIndex &index)
    {
        QDirModel *modele = new QDirModel;
        ui->tableView->setRootIndex(modele->index("/home"));
        ui->tableView->setModel(modele);
     
    }
    Tout d'abord j'ai quelques question qui me turlupine , parmi celle ci qu'est que le QModelIndex car ce que je pense avoir compris c'est que le QModelIndex permet de situer mes données dans le modèle ce qui reste tout de même assez flou .... Je ne comprend pas du tout le système pourtant je comprend le MVC mais la tout me parait totalement flou , utilisant QTdesigner pour eviter de m'amuser a placer tout mes widget je pense que ca ne m'aide pas non plus Comment du coup en creant un TableView avec QTdesigner je peut manipuler mon modele ? Si quelqu'un pouvais vraiment m'aider ce QT me sors par les yeux -_- et je commence a desespéré !! :) EDIT 2 : Après de laborieuse recherche j'ai trouver un petit bout de programme que j'ai testé tout d'abord dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678910
     
        QSplitter *splitter = new QSplitter;
        QFileSystemModel *model = new QFileSystemModel;
        model->setRootPath(QDir::currentPath());
        QModelIndex parentIndex =model->index(QDir::currentPath());
        QTableView *tree = new QTableView(splitter);
        tree->setModel (model);
        tree->setRootIndex(parentIndex);
        splitter->setWindowTitle("Two views onto the same file system model");
        splitter->show();
    ceci ma en effet afficher l'arborescence de mon Dossier actuelle donc en vue de cette algorithme et du fait que j'utilise QT designer comment dois-je procéder ? :s pour faire que mon slot affiche ceci , en effet j'ai du mal avec QT designer de comprendre le fonctionnement des méthodes Par la suite serais-je obliger de concevoir un modèle afin de pouvoir rentrer des informations supplémentaire tel que des donnée calculé ?
    Par tentative je me rapproche de plus de ce que je souhaite néanmoins je n'arrive pas a concevoir la façon dont je pourrais arriver a realiser ce tableau en effet voici actuellement mon tab widget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123456789
     
    void Interface::tableWidget_activated()
    {
        QFileSystemModel *model = new QFileSystemModel;
        model->setRootPath(QDir::currentPath());
        QModelIndex parentIndex = model->index(QDir::currentPath());
        tableView->setModel(model);
        tableView->setRootIndex(parentIndex);
    }
    ceci insére dans ma fenetre un QtableView avec tout les info sur le repertoire courrant , cependant je voudrais en plus de cela rajoutais des colonne est inséré des donnée en plus ... D'une part je souhaiterai arriver a prendre non pas le currentPath mais le path entrée dans une lineEdit , afin d'afficher le répertoire ou je souhaite travailler

    EDIT


    Après reflexion j'ai reussi a afficher l'arborescence du fichier entrer dans le QlineEdit donc je pense quequ'au niveau du QTable je vais en rester la ne sachant pas créer de modéle je ne peut pas faire ce que je veux :s





    Merci encore
    Bien cordialement
    DS

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/07/2006, 11h32
  2. [Débutante]requete pour lister des fichiers?
    Par bouba83 dans le forum Access
    Réponses: 8
    Dernier message: 18/05/2006, 16h58
  3. Lister des fichiers dans un repertoire
    Par K.othmane dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 11h14
  4. Boucle en Dos pour lister des fichiers selon une date
    Par Corben dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2005, 12h17
  5. lister des fichiers selon des critères
    Par Corben dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 18/10/2005, 16h52

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