[C++] Slot QTimer
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

[C++] Slot QTimer



  1. #1
    invite5cfd9116

    [C++] Slot QTimer


    ------

    Salut à tous,

    Je voudrais créer un programme qui tourne en tache de fond, et qui déclenche un slot toutes les x secondes. Je voudrais créer ce programme avec QTimer, mais malgré toute ma bonne volonté, je n'y arrive pas... Je sais qu'il y a beaucoup de doc sur internet, mais je n'arrive pas à compiler mon programme. A chaque fois il y a une erreur qui survient et quand j'arrive à la résoudre, trois autres apparaissent. Ça fait des heures que je suis sur ce programme, et je bloque à cause de cette foutue fonction QTime que je n'arrive pas à faire fonctionner ! Je sature et du coup je n'arrive pas à ma concentrer. Du coup je me permet de vous demander un peu d'aide

    Si quelqu'un pouvait me filer un code très simple qui (par exemple) augmente une variable de 1 toutes les 5000ms, ça me permettrait de visualiser mieux la façon de l'utiliser.

    Merci beaucoup d'avance !

    -----

  2. #2
    Jack
    Modérateur

    Re : [C++] Slot QTimer

    En fait, j'ai du mal à comprendre ce qui ne fonctionne pas car l'utilisation d'un timer est des plus simples. Pourrais-tu donner un code simple de l'implémentation de ton timer. Si ton appli est très importante, crée un nouveau projet ne contenant que le strict minimum, de manière à simplement activer l'exécution d'une fonction périodiquement.

    A+

  3. #3
    invite5cfd9116

    Re : [C++] Slot QTimer

    Citation Envoyé par Jack Voir le message
    En fait, j'ai du mal à comprendre ce qui ne fonctionne pas car l'utilisation d'un timer est des plus simples.
    Je sais bien, et c'est ce qui me rend fou ! En fait mon appli n'est pas "très importante" bien au contraire ! A vrai dire (c'est compliqué à expliquer) ce programme se constitue de deux programmes : un très important et un tout petit avec uniquement un timer et un slot qui exécute un action basique toute les 5 sec. Bon je sais ça parait bizarre mais de toute façon ici n'est pas la question. Je bloque sur le petit fichier qui est sensé être le plus simple.
    Voilà le timer de base si je ne m'abuse :
    Code:
    QTimer * timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(fonction()));
        timer->start(5000, FALSE);
    Voilà maintenant je suis devant mon fichier main.cpp qui contient uniquement ça :
    Code:
    #include <QApplication>
    #include <QTimer>
    
    int main(int argc, char *argv[])
    {
    
        QApplication app(argc, argv);
    
    
          return app.exec();
    }
    Du coup maintenant, qu'est-ce que je fais ? (J'ai vraiment honte de poser une question aussi stupide, je suis sur qu'un débutant saurait comment faire, mais là je suis tellement exaspéré et fatigué que je n'ai plus le choix...)
    Vous devez penser que je vous fait perdre votre temps et j'en suis désolé, mais je ne peut pas attendre demain pour y réfléchir.

    Merci beaucoup d'avance pour votre aide !

  4. #4
    Jack
    Modérateur

    Re : [C++] Slot QTimer

    Vous devez penser que je vous fait perdre votre temps
    Absolument pas. C'est le principe du forum de résoudre des problèmes.

    Tu ne dis pas où est écrit le code que tu donnes concernant le timer.
    De plus, où se trouve la fonction "fonction()"?
    Où as-tu déclaré fonction() dans public slots: ?

  5. A voir en vidéo sur Futura
  6. #5
    invite5cfd9116

    Re : [C++] Slot QTimer

    Citation Envoyé par Jack Voir le message
    Absolument pas. C'est le principe du forum de résoudre des problèmes.
    Merci ça me rassure

    Citation Envoyé par Jack Voir le message
    Tu ne dis pas où est écrit le code que tu donnes concernant le timer.
    De plus, où se trouve la fonction "fonction()"?
    Où as-tu déclaré fonction() dans public slots: ?
    Eh ben après avoir galéré pendant plus d'une bonne heure, je me suis dit que repartir de zéro serait l'idéal. J'ai donc tout supprimé. voilà donc mon code actuel :
    Code:
    #include <QApplication>
    #include <QTimer>
    
    void fonction() {
    
        nombre++;
    
    }
    
    int main(int argc, char *argv[])
    {
    
        QApplication app(argc, argv);
        int nombre = 0;
        
        QTimer * timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(fonction()));
        timer->start(5000, FALSE);
    
        return app.exec();
    }
    Et à partir de la je ne sais plus trop quoi faire...

  7. #6
    Jack
    Modérateur

    Re : [C++] Slot QTimer

    Ca ne peut pas compiler déjà, vu que fonction() n'est pas définie.

    Il te faut créer une classe dans laquelle tu déclareras et définiras ton timer, la fonction à activer périodiquement, ainsi que le constructeur qui instanciera et lancera le timer,
    Dans la fonction main, il suffira d'instancier un objet de la classe que tu viens de créer.

  8. #7
    invite5cfd9116

    Re : [C++] Slot QTimer

    Euh oui exact j'ai pas pris le bon code...
    Voilà à peu près ou j'en suis (attention c'est pas beau à voire)
    Code:
    #include <QApplication>
    #include <QTimer>
    #include <iostream>
    
    class maClasse
    {
        Q_OBJECT
        public:
            void fonction();
    
    };
    
    inline void maClasse::fonction() {
    
        std::cout << "coucou" << std::endl;
    }
    
    int main(int argc, char *argv[])
    {
    
        QApplication app(argc, argv);
    
        QTimer *timer = new QTimer;
        connect(timer, SIGNAL(timeout()), this, SLOT(fonction()));
        timer->start(5000);
    
        return app.exec();
    }
    Et à partir de là je suis complettement perdu. Je pense que je dois faire un blocage sur QTimer parceque j'arrive même pas à voire où sont mes erreurs ^^
    Bref j'espère que tu pourras m'orienter. Merci d'avance !

  9. #8
    Jack
    Modérateur

    Re : [C++] Slot QTimer

    Tu n'as pas déclaré fonction comme un slot, ça ne peux pas fonctionner.
    Pour ma part, je préfère déclarer mes classes dans des fichiers séparés. Pour cela, clic droit sur le nom de ton projet dans la fenêtre projet de QT Creator, puis "ajouter nouveau" puis classe C++
    Il n'y a plus qu'à compléter les 2 fichiers maClasse.h et maClasse.cpp tels que ci-dessous (attention, je travaille avec Qt5. Comme apparemment tu es sous QT4, QCoreApplication deviendra QApplication)
    Code:
    #ifndefMACLASSE_H
    #defineMACLASSE_H
    #include<QCoreApplication>
    #include<QTimer>
    #include<QObject>
    
    
    class maClasse:QObject
    {
    Q_OBJECT
    public:
       maClasse();
    publicslots:
       voidfonction();
    private:
       QTimer* timer;
    };
    
    #endif//MACLASSE_H
    Code:
    #include"maclasse.h"
    #include<iostream>
    
    
    maClasse::maClasse()
    {
       timer = new QTimer;
       connect(timer,SIGNAL(timeout()),this,SLOT(fonction()));
       timer->start(5000);
    }
    
    
    void maClasse::fonction()
    {
       std::cout<<"coucou"<<std::endl;
    }
    Reste à instancier un objet de maClasse et c'est parti !!!!
    Code:
    #include<QCoreApplication>
    #include"maClasse.h"
    
    
    int main(intargc,char*argv[])
    {
       QCoreApplicationa(argc,argv);
       maClasse monTimer;
    
    
       return a.exec();
    }
    Dernière modification par Jack ; 08/11/2014 à 14h23. Motif: Problème d'indentation

  10. #9
    invite5cfd9116

    Re : [C++] Slot QTimer

    Enfin ça fonctionne ! En effet j'avais complètement oublié de déclarer la fonction comme slot... Bref merci infiniment pour ton aide !

Discussions similaires

  1. Desactivation d'un slot 72 pin
    Par invite56d2c8e6 dans le forum Électronique
    Réponses: 16
    Dernier message: 27/07/2012, 13h15
  2. [Biologie Moléculaire] Infos sur dot slot blot
    Par invite58382b55 dans le forum Biologie
    Réponses: 6
    Dernier message: 31/10/2010, 14h22
  3. RTT vs Slot Time
    Par FonKy- dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 13/12/2009, 16h38
  4. Slot
    Par invite800a3b4b dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 23/08/2007, 20h24
  5. Nb de mo par slot
    Par invite49c0fa7f dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 30/01/2004, 19h21