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] Lancement décalé


Sujet :

Qt

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut [QProgressBar] Lancement décalé
    Tout d'abord bonsoir, je suis nouveau sur ce forum. Et je viens à vous pour vous exposer un de mes problèmes. L'autre va suivre dans le topic que je vais créer juste apres. N'ayant pas trouvé les réponses que je souhaitais apres avoir chercher sur le forum.

    Maintenant mon 1er probleme:
    J'utilise un lecteur video phonon lancé à partir d'un PushButton vid. Ce module étant assez long à charger, il y a 3 bonnes secondes de latence. Je décide donc de mettre une barre de chargement la dessus pour montrer que le programme n'a pas planté!
    Mais mon problème est que le lecteur charge, se lance, et seulement après la progressbar commence à s'incrémenter. Je ne comprends pas pourquoi...
    Merci d'avance pour l'aide que vous pourrez m'apporter.

    Voici mon code:
    le .h
    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
    #ifndef MAINDIALOG_H
    #define MAINDIALOG_H
     
    #include <QDialog>
    #include <QtGui>
    #include "ui_maindialog.h"
     
     
    namespace Ui {
        class Maindialog;
    }
     
    class Maindialog : public QDialog {
        Q_OBJECT
    public:
    	QTimer *timer;
     
    public:
        Maindialog(QWidget *parent = 0);
        ~Maindialog();
     
    protected:
        void changeEvent(QEvent *e);
    private slots:
        void ShowArticle();
    	void ShowVideo();
    	void LancerImage();
    	void startBar();
        void updateBar();
     
    signals:
    	void Pho();
     
     
      //  void closeEvent( QCloseEvent* event );
        /* Insérez les prototypes de vos slots personnalisés ici */
     
     
    private:
        Ui::Maindialog *ui;
    };
     
    #endif // MAINDIALOG_H
    Et le cpp

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include "maindialog.h"
    #include "article.h"
    #include "video.h"
    #include "ui_maindialog.h"
    #include <QProcess>
     
     
     
     
    Maindialog::Maindialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Maindialog)
    {
        ui->setupUi(this);
    	timer = new QTimer(this);
     
    	connect( ui->image, SIGNAL(clicked()), this, SLOT(LancerImage()));
     
    	timer->setInterval(20);
    	connect(timer, SIGNAL(timeout()), this, SLOT(updateBar()));
    	connect(ui->vid,SIGNAL(clicked()), this, SLOT(startBar()));
    	connect( ui->arti, SIGNAL(clicked()), this, SLOT(ShowArticle()));
    	connect( ui->vid, SIGNAL(clicked()), this, SLOT(ShowVideo()));
     
     
     
     
     
    }
     
    Maindialog::~Maindialog()
    {
        delete ui;
    }
     
    void Maindialog::changeEvent(QEvent *e)
    {
        QDialog::changeEvent(e);
        switch (e->type()) {
        case QEvent::LanguageChange:
            ui->retranslateUi(this);
            break;
        default:
            break;
        }
    }
    void Maindialog::ShowArticle()
    {
      Article *fenArti = new Article(this);
      fenArti->showFullScreen();
    }
    void Maindialog::ShowVideo()
    {
    	video *fenVid = new video(this);
    	fenVid->showFullScreen(); 
    }
     
    void Maindialog::LancerImage()
    {	QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+"/Collage.exe - Raccourci"));
     
    }
    void Maindialog::startBar()
    {
    	ui->progressBar->reset();
        timer->start();
     
     
    }
     
    void Maindialog::updateBar()
    {
    	int value = ui->progressBar->value(), maximum = ui->progressBar->maximum();
    	if (value < maximum)
        {
            value ++;
            ui->progressBar->setValue(value);
        }
     
        if(value >= maximum)
        {
            timer->stop();
    	}
    }

  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
    Je n'ai jamais fais de progress bar mais je dirai que le problème est que tu dois la faire progresser dans un thread séparé (car le thread principal est occuper a charger ton lecteur)

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Sans regarder ton code : quand lances-tu ta progressbar ? C'est bien avant de lancer le chargement de la partie Phonon ? Je dirais que tu devrais lancer ton traitement Phonon juste après avoir lancé ta bar (un slot connecté au bouton qui lance la QPB et Phonon).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    Je n'ai jamais fais d'application multi thread, à vrai dire j'ai commencé à utiliser QT il y a un mois environ, mais je dois avancer au plus vite car il s'agit d'un projet industriel que je réalise avec mon école pour une entreprise.

    Pour le moment j'ai 3 slots distints, le slot de start de la barre et le slot d'ouverture phonon ouvert tous les 2 sur le signal "click" du pushbutton, et le slott update de la progresse Bar connecté sur le signal TimedOut . Donc normalement les 2 slots devraient être appelé en même temps.
    De plus j'avais creer un signal Pho() (il y a encore une trace dans le header d'ailleurs....) que j'émettais dans au départ du slot de lancement de phonon .
    J'ai aussi essayé de lancer la fenetre phonon dans le slot de l'update bar, en mettant pas exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (value =10 )
    {
    	video *fenVid = new video(this);
    	fenVid->showFullScreen(); 
    }
    Avec cet essai, la barre chargeait a 10, phonon se lançait mais la barre ne finissait pas de charger.

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Si tu ne mets rien pour que la barre avance, elle n'avancera pas. Dans ton cas, ça va être dur d'avoir un avancement de la tâche : sette max et min à 0, puis tu désactives ta bar (il y a une fonction pour ça ou bien tu la laisses se détruire en sortant du scope).

    Pourquoi faire deux slots dans ce cas ? Je ne trouve pas ça très intuitif, personnellement... On n'en parle même pas dans la ! C'est pour dire que c'est utilisé souvent... Je ne suis pas sûr que ce soit possible non plus... Si c'est impossible, c'est de là que vient ton problème : un seul des deux slots est appelé. Soit tu fusionnes les deux, soit tu appelles le second du premier (un slot, c'est une méthode à laquelle on a ajouté quelques fonctionnalités, lais c'est d'abord une méthode).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Par défaut
    J'ai résolu mon problème.
    Mais en m'y prenant d'une autre façon.
    Car peu importe l'endroit ou je lançait ma fenêtre phonon, cela arrêtait la barre de progression...
    J'ai donc tout d'abord changer la barre de progression par un texte de chargement, je pensais que ça résoudrait le problème!
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	ui->charge->show();
            video *fenVid = new video(this);
    	fenVid->showFullScreen(); 
    	ui->charge->hide();
    et bah non! L'espace se créait entre mes différents widgets pour laisser apparaitre le texte, mais celui ci restait transparent, n'apparaissait pas donc...

    Enfin, j'ai trouvé l'astuce... J'ai mis le chargement sur le signal "pressed" et la création de la fenêtre sur le "released" du coup, pu de soucis de thread ou autre
    J'espère que ca pourra en aider d'autre !

    Merci pour votre aide

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

Discussions similaires

  1. [QProgressDialog] Lancement décalé et compilation lente
    Par stanfillirenfro dans le forum Débuter
    Réponses: 0
    Dernier message: 26/09/2012, 12h14
  2. [Kylix] Erreur au lancement de K3 en open C++
    Par Glouferu dans le forum EDI
    Réponses: 9
    Dernier message: 14/03/2003, 16h27
  3. Réponses: 1
    Dernier message: 13/01/2003, 09h26
  4. [Kylix] PB au lancement
    Par sebounator dans le forum EDI
    Réponses: 3
    Dernier message: 09/01/2003, 12h10
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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