Salut à tous,
J'ai un petit soucis concernant l'organisation dans mon soft (deja developpé par quelqu'un d'autre et que je dois modifier .. )
en fait, ce que veux faire c'est en fonction de l'etat d'une checkbox :
false -> emettre une consigne avec deux parametres -> 1er mode
true -> emetre n consigne avec deux parametres -> 2eme mode
Jusqu'ici tout va bien
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 void DpConsignImpl::ButtonGisDist() ////////////////////////////////////////////////////////////////////// { int gis_total = this->spinBoxGisement->value() ; int dist_total = this->spinBoxDistance->value() ; this->spinBoxDistance->setValue(0); this->spinBoxGisement->setFocus(); // Si checkbox = true -> mode raliement de point, MODIF FRO 120307 if(this -> checkBoxFollowLine -> isChecked() == true){ int delta_d = this->spinBoxDeltaD->value() ; // intervalle de distance parametrable int delta_t = this->spinBoxDeltaT->value() ; // intervalle de temps parametrable int nbr_wpts = dist_total / delta_d; // nbr de WayPoint à faire int dist_rest = dist_total % delta_d; // dernier mouvement, reste de la divisio n entiere .. int x0 = 284873; //Récupération des coordonées X à To int y0 = 5103684; //Récupération des coordonées Y à To //Emmission des WayPoint (saud le dernier) en absolute for(int inc=1;inc<=nbr_wpts;inc++){ // Calcul des coordonée (en absolute) à faire int xi = x0 + ((delta_d * inc) * sin (gis_total * DEG_TO_RAD)); int yi = y0 + ((delta_d * inc) * cos (gis_total * DEG_TO_RAD)); // Controle sonore d'emisssion de la consigne Beep(500,50); // Emission de la nouvelle consigne emit AutoPosAbsoluteAction(xi, yi, gis_total) ; // Tempo delta_t Sleep(1000 * delta_t); } } // else mode normal, emmission de la consigne en UNE SEULE fois .. else{ emit AutoPosGisDistAction(gis_total, dist_total, -1) ; } }
1 er mode -> OK
2 eme mode -> OK mais blocage de l'appli entre 2 emmissions de consigne .. dû au "Sleep"
Et en fait ce que je veux faire moi, c'est apres avoir emis une consigne, continuer a afficher mes images, a rafraichir mes valeurs bref .. en fait, de sortir de cette fontion pour executer toutes les autres et d'y reentrer pour l'emmission de la prochaine ..
J'ai essayé avec un QTimer mais ca marche pas .. Vous avez une idée .. ?
le morceau de code en aval .. :
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 ////////////////////////////////////////////////////////////////// //! NavManager dpAbsoluteConsign function /*! This function records the new absolute consign \param x,y : absolute utm consign \param cap_bateau: ship azimuth */ void NavManager::dpAbsoluteConsign(float x, float y, float cap_bateau) { ////////////////////////////////////////////////////////////////////// if(autoPos) { /****/posMutex.lock(); setUtmX_Consigne(x) ; setUtmY_Consigne(y) ; /****/posMutex.unlock(); /****/capMutex.lock(); setCap_Consigne(cap_bateau) ; /****/capMutex.unlock(); } } 1
Partager