Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1506 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  probleme de slot avec qt et de QTimer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de slot avec qt et de QTimer

n°1555648
AdelineSl
Posté le 05-05-2007 à 11:50:06  profilanswer
 

Bonjour, je programme un bomberman avec c++ et la bibliotheque qt, je voudrais utiliser la fonction singleShot de Qt mais je pense avoir un probleme avec le SLOT comment définir la fonction que je veux utiliser comme étant un slot? pour l'instant j'ai mis dans mon .h : protected slots: ma fonction(int a, int b) et ensuite dans mon .cpp au moment ou j'ai besoin de cette fonction j'ai fait : QTimer::singleSlot(1000,this,SLOT(mafonction(a,b))) quand je lance mon programme, ma fonction ne se lance jamais. Est ce que quelqu'un serait m'aider? merci d'avance
Adeline

mood
Publicité
Posté le 05-05-2007 à 11:50:06  profilanswer
 

n°1555682
IrmatDen
Posté le 05-05-2007 à 13:42:48  profilanswer
 

Salut,
Tu ne peux pas passer des paramètres par un slot. La bonne signature à passer est ma_fonction(int,int) au lieu de ma_fonction(a,b).
Ensuite, ça ne fonctionnera pas car le slot doit avoir la même signature que le signal auquel il est connecté. Et comme QTimer::singleShot masque un connect sur un signal timeout(), ta fonction ne peut pas être connectée.

n°1555707
AdelineSl
Posté le 05-05-2007 à 14:41:06  profilanswer
 

oki mais alors comment je peux faire pour que ma fonction qui a besoin de parametres se déroule apres x seconde?

n°1555722
IrmatDen
Posté le 05-05-2007 à 15:29:22  profilanswer
 

Faire en sorte que ta fonction n'ait pas besoin de paramètre? Ou plutôt, faire en sorte que ta fonction qui ait besoin de paramètre soit appelé par le slot qui lui n'en aura pas besoin.

n°1555931
AdelineSl
Posté le 06-05-2007 à 10:13:54  profilanswer
 

coucou, je me suis débrouillée pour que ma fonction slot n'ai pas de parametre et apelle une autre fonction mais ca ne marche quand meme pas :(  
 
j'ai fait :  
#ifndef _MAP_H_
#define _MAP_H_
 
#include <QApplication>
#include <QPainter>
#include <QEvent>
#include <QKeyEvent>
#include <QWidget>
#include <QTimer>
 
class Map : public QWidget
    {
    public:
        // constructeur    
      Map(QWidget *parent = 0);
    public slots :
           
    void timerEvent();
 
ca j'ai mis dans mon.h et ensuite dans mon .cpp j'ai simplement ecrit : QTimer::singleshot(1000,this,SLOT(timerevent()));
et il n'apelle jamais ma fonction timer event est ce que tu sais pq?

n°1555967
IrmatDen
Posté le 06-05-2007 à 13:10:56  profilanswer
 

Déjà, ça risque pas de compiler avec cette ligne, c'est singleShot, pas singleshot.
Et il y a une seconde erreur qui est exactement la même sur la même ligne qui fait que ton slot n'est pas appellé puisqu'inconnu.

n°1555998
AdelineSl
Posté le 06-05-2007 à 14:22:01  profilanswer
 

c'est fautes la ne sont pas dans mon programme j'ai recopié ici en oubliant les majusculesd et ca ne fonctionne quand meme pas est ce que la définition de mon slot dans le .h ezst suffisante?

n°1556001
IrmatDen
Posté le 06-05-2007 à 14:34:38  profilanswer
 

Normalement oui... Ouvre ton fichier projet.pro, et ajoute la ligne suivante:

Code :
  1. CONFIG += console


Le programme s'ouvrira avec une console, et affichera un message d'erreur si le connect n'est pas bon. Le message s'affichera au moment du connect, donc reproduis l'utilisation que tu veux en faire.
 
Ensuite, colle le message ici, on y verra plus clair.

n°1556004
AdelineSl
Posté le 06-05-2007 à 14:39:44  profilanswer
 

je ne vois pas bien ou taper cette ligne de code (hyper débutante) quand je la met dans le main il dit ne pas connaitre CONFIG et dans le constructeur de ma classe il dit la meme chose.

n°1556010
IrmatDen
Posté le 06-05-2007 à 15:03:29  profilanswer
 

J'ai dit dans le fichier projet (tu dois bien avoir un fichier.pro quelque part?). Ce n'est effectivement pas une instruction valide dans un fichier c++ :P

mood
Publicité
Posté le 06-05-2007 à 15:03:29  profilanswer
 

n°1556023
AdelineSl
Posté le 06-05-2007 à 15:39:37  profilanswer
 

nope pas de fichier pro :D j'ai des trucs .dev

n°1556028
IrmatDen
Posté le 06-05-2007 à 16:00:28  profilanswer
 

Tu utilise quel IDE???

n°1556029
AdelineSl
Posté le 06-05-2007 à 16:04:17  profilanswer
 

je ne sais pas ce qu'est un IDE mais j'utilise dev c++ c'est ca? sur windows

n°1556039
IrmatDen
Posté le 06-05-2007 à 16:45:49  profilanswer
 

Aïe, je suis pas sûr de pouvoir t'aider plus. Tu as suivi un tuto particulier? Y'a-t-il un champ dans la configuration de ton projet où tu peux choisir entre un mode console et un mode fenêtre?

n°1556047
AdelineSl
Posté le 06-05-2007 à 17:02:29  profilanswer
 

non je n'ai pas le choix de ma console :/

n°1556048
IrmatDen
Posté le 06-05-2007 à 17:07:34  profilanswer
 

Bon... alors, on rentre dans les expériences alors... ouvre une console (démarrer > exécuter > cmd), puis va dans le dossier où il y a ton exécutable, et lance le avec cette commande:
tonfichierexe > output.txt
 
Ensuite, tu utilises ton appli jusqu'au moment où le slot devrait être appellé, puis tu quittes. Ensuite, si tout va bien, tu devrais avoir un fichier output.txt qui se crée dans le même répertoire. S'il contient quelque chose, post le ici.
 
Dans le cas contraire, post tout le code nécessaire à la compréhension du problème:
> création du timer
> fonction compléte où le connect est fait
> contenu du slot
> contenu de la fonction appellée par le slot

n°1556051
AdelineSl
Posté le 06-05-2007 à 17:40:17  profilanswer
 

je n'ai pas fait de fonction connect c'est quoi+?

n°1556055
IrmatDen
Posté le 06-05-2007 à 17:47:32  profilanswer
 

Au temps pour moi, je parlais de ça: QTimer::singleshot(1000,this,SLOT(timerevent()));

n°1556382
AdelineSl
Posté le 07-05-2007 à 10:45:53  profilanswer
 

Voci mon main :
#include "Map.h"
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        Map carte;
        carte.show();
        return app.exec();
   
    }
 
 
voici mon Map.h :
#ifndef _MAP_H_
#define _MAP_H_
 
#include <QApplication>
#include <QPainter>
#include <QEvent>
#include <QKeyEvent>
#include <QWidget>
#include "joueur.h"
#include <QTimer>
#include "file.h"
#include <queue>
 
 
class Map : public QWidget
    {
    public:
 
      Map(QWidget *parent = 0);
           
      void timerEvent();
             
 protected:  
             
quelques fonctions  
         
 private:
 
         };
#endif
 
ensuite dans une fonction je mon.cpp j'apelle :
QTimer::singleShot(1000,this,SLOT(timerEvent()));

n°1556495
IrmatDen
Posté le 07-05-2007 à 14:59:11  profilanswer
 

Alors, est-ce que tu peux faire comme je t'ai demandé et nous donner tout ce qui est utile? Là, je ne vois pas la fonction entière où tu appelles le singleShot...
 
Par contre je vois une chose qui a changé: void timerEvent() n'est plus déclaré comme slot, mais comme fonction normale. Ensuite, il n'y a pas la macro Q_OBJECT dans Map (obligatoire pour, entre autres, les signaux/slots).
 
Je te conseille d'aller réviser un peu, j'ai l'impression que tu n'as pas compris grand chose à ce système.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  probleme de slot avec qt et de QTimer

 

Sujets relatifs
FPDF problème d'orientationProbleme FCKeditor (code source image)
problème de requete sqlprobleme session_start ()
Création de forum : problème avec l'inscriptionProblème de bordures en CSS?
[JAR] Probleme avec la creation d'un .jarProblème avec l'insertion d'une date
Probleme affichage image dans une appletproblème de requete en fonction de l'url de la page
Plus de sujets relatifs à : probleme de slot avec qt et de QTimer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR