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 :

slots

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut slots
    Bonsoir, je code une petite appli qui doit me donner la position de ma sourie dans un QTextEdit .

    Etant sous Ubuntu j'utilise donc xlib.

    J'ai crée un fonction qui marche sans souci suite a quoi j'ai ajouté une boucle for pour l'avoir 5 fois.

    En utilisant sleep(1); ca fonctionne sans souci, j'ai voulu essayer avec un QTimer;

    Suite à quelque erreur de ma part, j'ai du refaire un peu mon code mais je suis constamment confronté à une erreur de segmentation dans la 2eme boucle.

    Voici le code qui pose probléme, je reconnais que c'est "sale" mais la je "bricole" pour essayer de comprendre d'ou vient le probléme .

    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
    void Widget::sourie()
    {
        setDisplay(XOpenDisplay(""));
        if (readDisplay() == NULL)
     
        {
           m_textedit->append("Impossible d'ouvrir un display");
           return;
       }
     
        setWindow(DefaultRootWindow(readDisplay()));
     
        for (int i = 0;i<5;i++)
     
        {
        if (i == 0) curseur();
        else QTimer::singleShot(200,this,SLOT(curseur()));
        m_textedit->append( "X : "+QString::number(a,10)+" Y : "+QString::number(b,10));
        }
     
        if ((XCloseDisplay(readDisplay())) == 1)
        m_textedit->append("Imposside de fermer le Display");
    }
     
    void Widget::curseur()
    {
        Display* display = readDisplay();
        Window root_window = readWindow();
        int tempX = 0;
        int tempY = 0;
        Window w1,w2;
        int z=0;
        unsigned int w = 0;
        XQueryPointer (display,root_window,&w1,&w2,&tempX,&tempY,&z,&z,&w);
        setx(tempX);sety(tempY);
    }
    La premiere boucle appelle curseur() directement et se passe sans souci, quand on rentre dans la 2eme le QTimer intervient et la c'est le drame ca plante erreur de segmentation .

    Si je modifie ma boucle for pour que curseur() soit appeller directement même au bout de 500 boucle ca fonctionne toujours .

    Donc c'est bien le slot qui doit cafouiller mais je ne comprend pas ce qui se passe :/

    Auriez vous une idée ?

    Merci d'avance

    Bonne soirée

  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
    Citation Envoyé par geek-59600 Voir le message
    Bonsoir, je code une petite appli qui doit me donner la position de ma sourie dans un QTextEdit .
    http://qt.developpez.com/doc/4.6-snapshot/qcursor/#pos



    Citation Envoyé par geek-59600 Voir le message
    Auriez vous une idée ?
    Il te faudrai utiliser le debugger et valgind pour voir ou tu plante et si tu as une erreur memoire. Le problème des erreur mémoire c'est que ce n'est psa toujours là ou on la fait que ca plante et parfois ca plante pas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    OMFG je suis passé a coté de ca :/

    Je me disais bien qu'il existait une fonction pour le faire mais j'ai pas assez bien cherché ...

    Et dire que je m'emme*de depuis 2 jours avec Xlib ...

    Merci a toi, je vais déja modifier mon code et ensuite je vois pour le slot .

  4. #4
    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 geek-59600 Voir le message
    OMFG je suis passé a coté de ca :/
    Ouais, enfin, j'ai vue cette fonction y as quelque mois quelque part, je ne sais où. J'ai mis 15 minute pour retrouver la classe et la fonction
    Sinon, je n'auras pas pu t'aider
    Remarque avec google c'est dans les première pages en faite

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    Disons que dans google j'ai taper équivalent GetCursorPos() sous linux et je me suis retrouvé tout de suite avec Xlib j'ai bien regardé brièvement avec Qt mais je suis passé a coté

    Je crois que j'ai compris les QTimer sont non bloquant il me semble ?

    Dans ce cas il exécute la boucle une premiére fois sans problème,mais à la seconde la boucle for sera fini avant que les slots soit appelés !

    Donc forcément le timer est useless .

    Depuis le début je fais fausse route ...

    J'vais vraiment potasser la doc ca m'évitera de réinventer la roue

    Edit : Je viens de finir ce petit programme, cependant j'aimerai savoir ce que vous appelez un code propre même si c'est uniquement pour moi, je m'efforce à coder du mieux possible donc si vous avez des conseils à me donner je vous en serais fort reconnaissant.

    Merci bien.

Discussions similaires

  1. Problèmes de slots et signals
    Par femtosa dans le forum Qt
    Réponses: 4
    Dernier message: 13/12/2005, 09h39
  2. Réponses: 10
    Dernier message: 09/10/2005, 22h33
  3. Installer un pentium III sur slot 1
    Par major2 dans le forum Composants
    Réponses: 2
    Dernier message: 11/05/2005, 11h55
  4. Qt::connect: no such slot ...
    Par fdrouhin dans le forum Qt
    Réponses: 8
    Dernier message: 02/12/2004, 19h11
  5. Apache et nombre de slots
    Par Acti dans le forum Apache
    Réponses: 7
    Dernier message: 23/10/2004, 23h57

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