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 .
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 .
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); }
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
Partager