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 :

QProgressBar dans un slot


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut QProgressBar dans un slot
    Bonsoir,

    Je voudrais savoir comment vous feriez pour faire avancer une QProgressBar au fur et à mesure d'un slot ?

    Je voudrais le commencer du début à la fin de manière assez fluide mais je sais pas comment faire...
    Je sais utiliser la QProgressBar avec une requête mais sinon j'ai jamais essayer et je vois pas comment faire du coup

    Voilà le 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 FenListeur::creation_xml(const QHash<QString, QString> &liste)
    {
        QString fileName = "liste_fichiers.xml";
        QFile file(fileName);
        file.open(QFile::WriteOnly | QFile::Text);
        QXmlStreamWriter writer(&file);
        writer.setAutoFormatting(true);
        writer.writeStartDocument();
     
        // Élément racine du fichier XML
        writer.writeStartElement("root");
     
        QHash<QString, QString>::const_iterator it;
        for (it = liste.constBegin() it != liste.constEnd(); ++it)
        {
            QString nomFichier = it.key();
            QString chemin = it.value();
     
            comboBox_film->addItem(nomFichier);
     
            writer.writeStartElement("fichier");
            writer.writeTextElement("nom", nomFichier);
            writer.writeTextElement("chemin", chemin);
            writer.writeEndElement();
        }
     
        // Finalise le document XML
        writer.writeEndDocument();
        // Fermer le fichier pour bien enregistrer le document et ferme l'élément root
        file.close();
    }
    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Bonjour,

    la question qu'il faut se poser c'est qu'est-ce qui va prendre du temps ?

    Ici sa semble être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     for (it = liste.constBegin() it != liste.constEnd(); ++it)
     {
            QString nomFichier = it.key();
            QString chemin = it.value();
     
            comboBox_film->addItem(nomFichier);
     
            writer.writeStartElement("fichier");
            writer.writeTextElement("nom", nomFichier);
            writer.writeTextElement("chemin", chemin);
            writer.writeEndElement();
     }
    Donc l'idéal est a priori de faire bouger ta bar a chaque itération (ou bien tout les x% d'avancement si tu as un très grand hash pour éviter d'envoyer des signaux a tout va qui ne ferais même pas bouger ta bar).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Oui mais comment mettre un int ?

    Il faut bien un int pour la valeur de la QProgressBar ?

    J'ai voulu rajouter un int dans le for mais ça n'a pas correctement marcher et après dans la boucle j'aurais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progressBar->setValue(i);

  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
    C'est pas plutôt une QProgressDialog que tu veux utiliser?
    http://qt.developpez.com/doc/latest/...tion-detaillee

    Pour info, si min et max =0, tu génère une progress bar infinie mais qui sera animé

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Merci je vais regardé je connaissais pas cette fonction...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Citation Envoyé par austin.fla Voir le message
    Oui mais comment mettre un int ?

    Il faut bien un int pour la valeur de la QProgressBar ?

    J'ai voulu rajouter un int dans le for mais ça n'a pas correctement marcher et après dans la boucle j'aurais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progressBar->setValue(i);
    En fait tu met un min et un max a ta QProgressBar (ou QProgressDialog qui est la même chose mais te l'affiche directement dans une fenêtre ce qui t'évite de placé ta QProgressBar dans un widget, ect..). Ces 2 valeur peuvent être n'importe quoi c'est toi qui gère comme sa t'arrange, ici je mettrai 0 a min et liste.size() a max. ensuite a chaque itération fais un setValue(i) (où i est le numéro de l'itération).
    Encore une fois tu peux amélioré la chose en ne faisant bougé ta bar que tout les 1% par exemple sinon tu risques de ralentir ton appli si ton Hash contient 1 000 000 d'entrées

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Voilà j'ai réussit finalement à la faire pour ce slot Merci !

    Je voudrais vous demander juste comment vous feriez pour ce slot, vu que je ne sais pas quoi choisir pour faire avancer la QProgressBar...

    Donc ce code est fait en sorte de lister les dossiers pour trouver tout les fichiers ou l'extension est dans le filters.

    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
     
    void FenListeur::listage()
    {
        QMap<QString, QString> results;
        QString cheminDuRepertoire = lineEdit_chemin->text();
        QDir repertoire(cheminDuRepertoire);
        repertoire.setFilter(QDir::NoDotAndDotDot | QDir::Files);
        QStringList filters;
        filters << "avi" << "divx" << "xvid" << "mpg" << "mpg2" << "mpg4";
        QStringList filters_complet;
        filters << "*.avi" << "*.divx" << "*.xvid" << "*.mpg" << "*.mpg2" << "*.mpg4";
     
        if(checkBox_sous_dossier->isChecked())
        {
            QDirIterator dirIterator(cheminDuRepertoire, filters_complet, QDir::AllDirs|QDir::Files|QDir::NoSymLinks, QDirIterator::Subdirectories);
     
            while(dirIterator.hasNext())
            {
                dirIterator.next();
     
                if(filters.contains(dirIterator.fileInfo().completeSuffix()))
                {
                    results.insert(dirIterator.fileInfo().fileName(), dirIterator.fileInfo().absolutePath());
                }
            }
        }
        else
        {
            foreach(QFileInfo fileInfo, repertoire.entryInfoList())
            {
                if(filters.contains(fileInfo.completeSuffix()))
                {
                    results.insert(fileInfo.fileName(), fileInfo.absolutePath());
                }
            }
        }
     
        creation_xml(results);
    }
    Merci et bonne soirée

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/11/2011, 22h55
  2. Que dois-je mettre dans mon slot ?
    Par tckalexon dans le forum Débuter
    Réponses: 5
    Dernier message: 23/05/2011, 12h55
  3. [boost::signal] declencher un signal dans un slot
    Par hushhush dans le forum Boost
    Réponses: 2
    Dernier message: 18/11/2009, 00h11
  4. erreur de chargement d'une .dll dans un slots
    Par da vinciii dans le forum Qt
    Réponses: 1
    Dernier message: 31/08/2008, 13h18
  5. CD bloqué dans lecteur slot-in
    Par Arnaud F. dans le forum Périphériques
    Réponses: 28
    Dernier message: 04/07/2006, 23h16

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