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 :

QSlider sliderPressed() ne fonctionne pas


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut QSlider sliderPressed() ne fonctionne pas
    Bonjour à tous,

    Je tente de réaliser un élément de type "lecteur média" avec ses boutons "play", "pause", "stop", et un QSlider (qui affiche l'avancement, mais qui permet aussi de se déplacer rapidement dans le média).

    Tout marche sauf le déplacement du slider par l'utilisateur. J'utilise des connect classiques, et je ne comprends pas pourquoi le fait de cliquer sur le slider n'active pas le slot "pause".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect(readSlider,SIGNAL(sliderReleased()),this,SLOT(slot_goToSpecifiedTime()));
    	connect(readSlider,SIGNAL(sliderPressed()),this,SLOT(slot_pauseFileRead()));
    Le slot fonctionne pourtant très bien (c'est le même que celui lié à mon bouton "pause", et le "sliderReleased()" marche aussi. J'ai tout simplement l'impression que le signal sliderPressed() n'est jamais émis.

    J'ai cherché sur le forum les threads similaires, et bien que ce soit un bazar terrible, j'ai trouvé quelque chose dans ce thread là ( au bas de la 5ème page)http://www.developpez.net/forums/d54...l-slot-thread/ Je n'ai pas testé le code, mais d'après les commentaires, il a l'air de marcher, et mon code utilise les mêmes principes que celui-ci.

    Avez vous une idée sur la source du problème ? Le fait de déplacer le slider au fur et à mesure de la lecture ne poserait-il pas un problème ?

    Merci pour votre aide,

    G.

  2. #2
    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
    Salut.
    As tu essayer de rajouter la console voire si tu n'as pas une erreur de connect?

  3. #3
    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
    piti exemple. J'ai bien sliderPressed

    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
    #include <QtGui>
     
    class myWidget : public QLabel
    {
    Q_OBJECT
     
    public  :
        myWidget(QWidget * parent=0)
        :QLabel(parent)
        {
        }
     
    public slots:
        void pressed()
        {
            setText("pressed");
        }
     
        void released ()
        {
             setText("released");
        }
     
    };
     
     
     
    #include "main.moc"
     
    int
            main(int argc,char**argv)
    {
      QApplication app(argc,argv);
      QWidget w;
        QSlider * slider = new QSlider;
        myWidget *mw = new myWidget;
        QObject::connect(slider,SIGNAL(sliderReleased()),mw,SLOT(released()));
        QObject::connect(slider,SIGNAL(sliderPressed()),mw,SLOT(pressed()));
        QHBoxLayout *l = new QHBoxLayout;
        l->addWidget(slider);
        l->addWidget(mw);
       w.setLayout(l);
       w.show();
      return app.exec();
    }

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    As tu essayer de rajouter la console
    oui
    tu n'as pas une erreur de connect?
    non
    Par contre, le signal marche quand ma lecture est en pause, donc je pense que le fait que le slider se déplace empêche l'émission du signal sliderPressed();

    Pour le déplacement, étant donné que j'ai plusieurs thread qui tournent, j'attends tous qu'ils aient finis leur run(), je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readSlider->setValue(readSlider->value()+1);
    puis tous mes threads se relancent, etc.

    Cependant, ce n'est pas une histoire de "temps trop court" pour gérer l'évènement, puisque je peux régler en live l'interval du timer qui lance mes thread, et même avec une latence de 3 secondes, ça ne marche pas.

    Par contre, j'ai mis une très haute priorité à mes thread (pour limiter les perturbations de l'OS), est ce que ça viendrait de cela ?

    G.

  5. #5
    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
    Citation Envoyé par Gulish Voir le message
    Pour le déplacement, étant donné que j'ai plusieurs thread qui tournent, j'attends tous qu'ils aient finis leur run(), je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readSlider->setValue(readSlider->value()+1);
    puis tous mes threads se relancent, etc.
    T'aurais pas un problème dans tes thread??
    Tu les lance comment?
    Qui les créé?
    Ou as tu définie les slot de tes threads?

    /!\QThread n'est pas un thread et ses slot ne s'execute pas dans la thread qu'il créé.



    Par contre, j'ai mis une très haute priorité à mes thread (pour limiter les perturbations de l'OS), est ce que ça viendrait de cela ?
    cela m'étonnerais... mais on ne sait jamais. En gros tu as une thread qui emet un signal qui va faire avancer ton slider. C'est bien cela?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Lol ne t'énerve pas, il n'y a pas de lien direct entre mon QSlider et mes threads. J'ai un timer en singleShot dans une classe "principale", avec son timeout connectés aux starts de mes threads. Je le start une fois, j'attends que les threads aient tous finis d'éxécuter leur run (ils émettent chacun un signal à la fin de celui ci). Une fois qu'ils ont tous terminés, dans cette même classe principale, je déplace mon slider et je restart mon timer.

    Donc le signal émis par mon thread n'est pas directement lié au déplacement du slider, ils passent par un slot hors des threads de "lecture".

    G.

  7. #7
    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
    Citation Envoyé par Gulish Voir le message
    Lol ne t'énerve pas,
    je m'énerve pô?
    c'est juste des pistes

    Citation Envoyé par Gulish Voir le message
    il n'y a pas de lien direct entre mon QSlider et mes threads. J'ai un timer en singleShot dans une classe "principale", avec son timeout connectés aux starts de mes threads. Je le start une fois, j'attends que les threads aient tous finis d'éxécuter leur run (ils émettent chacun un signal à la fin de celui ci). Une fois qu'ils ont tous terminés, dans cette même classe principale, je déplace mon slider et je restart mon timer.

    Donc le signal émis par mon thread n'est pas directement lié au déplacement du slider, ils passent par un slot hors des threads de "lecture".
    c'est bizarre. Je ne voie pas pourquoi l'évènement pressed est perdu.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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