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 :

Modifier un label

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut Modifier un label
    Bonjour,

    J'ai une fenêtre dans laquelle j'ai un bouton "Browse" et un label. Lorsque je clique sur le bouton je demande à l'utilisateur de choisir un répertoire. J'aimerais ensuite que le chemin de ce répertoire s'affiche dans le label et qu'ensuite mon traitement se lance (il peut durer plusieurs secondes).
    Le problème c'est que si je décommente l'appel de mon traitement plus bas, le label ne se met à jour qu'une fois celui ci terminé.

    Est-ce que vous savez comment faire pour que mon label se mette à jour avant le début de mon traitement svp ?

    Merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void WMain::on_button_Browse_clicked()
    {
     
        QString dir = QFileDialog::getExistingDirectory(this, tr("Sélectionnez un répertoire"), "/home", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
        qDebug () << "Répertoire sélectionné = " << dir;
     
        ui->label_Directory->setText(dir);
     
    /*    QString rootPath (dir);
        QFileInfo rootInfo(rootPath);
        rootDir.setInfo(rootInfo);
        rootDir.scan();*/
    }

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    C'est un problème courant. Il faut comprendre que ton code s'exécute dans un seul flux d'exécution ici, donc quand tu modifies la valeur du label, tu passes à l'instruction suivante directement et tu effectues ton traitement long. L'affichage du label ne se fait pas directement quand tu modifies sa valeur, c'est géré par Qt dans la boucle d'évènements et tant que ton code ne rend pas la main à cette boucle elle ne mettra pas à jour ton écran. Tu ne l'as peut être pas remarqué mais pendant ton traitement long ta fenêtre est figée.

    La bonne pratique est de ne pas faire de traitement long dans le thread de la boucle d'évènements Qt (pour ne pas bloquer ce flux d'exécution). Il faudrait que tu fasses ton traitement long dans un second thread. Tu peux donc te poser les questions habituelles, est-ce que ce traitement est bloquant pour l'application (cad que l'utilisateur ne doit pas faire d'action pendant ce temps) ? Est-ce qu'il utilise des données partagées avec le thread principal de la boucle d'évènements ? Etc
    Regarde du côté de QtConcurrent::run (il y a sans doute des exemples de multithread qui correspondent à ton besoin dans la doc Qt).
    Et la FAQ peut t'éviter quelques pièges : http://qt.developpez.com/faq/?page=m...-qtcore-thread

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Merci pour ta réponse, je vais voir ca...

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

Discussions similaires

  1. tag <layout:file/> : modifier le label "Parcourir"
    Par seblem dans le forum Struts 1
    Réponses: 2
    Dernier message: 11/10/2007, 15h05
  2. Modifier le label "Chapitre" en label "Partie"
    Par SkyBioSS dans le forum Mise en forme
    Réponses: 6
    Dernier message: 12/07/2007, 20h29
  3. Modifier des labels sans le code source
    Par Popof dans le forum WinDev
    Réponses: 2
    Dernier message: 12/07/2006, 11h21
  4. Modifié un label
    Par Oberown dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/04/2006, 11h15
  5. modifier une label dynamique
    Par zidenne dans le forum Composants VCL
    Réponses: 3
    Dernier message: 06/12/2005, 16h03

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