bonjour a tous
je suis bloqué dans mon projet :p
j'ai un widget dans lequel quand j'appuis sur un bouton "start" un texte se défilera dans une QLabel ligne par ligne.
j'utilise une boucle WHILE pour le défilement et timer pour contrôler le temps. Tout marche bien a ce stade
je voulais maintenant faire une PAUSE/RESUME ou CANCEL a ce boucle WHILE lorsque j'appuis sur des boutons du claviers (lettre "P" pour PAUSE , lettre "C" pour cancel ...)
pour le SIGNAL du clavier j'utilise QKeyEvent et j'ai reussi a capter le signal mais le probleme est de faire la pause ou le resume immidiatement
j'ai fait ça:
widget.h
widget.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ... public: void keyPressEvent(QKeyEvent *event); private slots: void Pause(); void Resume(); private: QMutex sync; QWaitCondition pauseCond; bool pause=false; ...
la pause se fait apres la fin du boule: lorsque j'appuis sur "P" la boucle se termine puis le SLOT Pause() est exécuté et non pas au moment d'appuis
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
46
47
48
49 void widget::Resume() { sync.lock(); pause = false; sync.unlock(); pauseCond.wakeAll(); } void widget::Pause() { sync.lock(); pause = true; sync.unlock(); } void widget::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_P: Pause(); break; case Qt::Key_R: Resume(); break; default: QWidget::keyPressEvent(event); break; } } void widget::monFonction() { ... while(condition) { sync.lock(); if(pause) pauseCond.wait(&sync); sync.unlock(); ... my operations ... } }
un peu d'aide svp
merci d'avance
Partager