Bonjour,

je code une application pour un algorithme 2OPT sur le problème du TSP. J'ai une interface graphique en QT qui affiche le poids du tour (cycle hamiltonien) dans un lineEdit et qui affiche le cycle dans une fenêtre openGL :



Mon problème, c'est que je voudrais voir les étapes du 2opt en temps réel et donc rafraichir la fenetre Qt. J'ai essayer un QThread mais sa ne fonctionne pas :

DEUX_OPT.h

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
class DEUX_OPT : public QThread
{
    private:
        Vue * _vue;
 
    public:
        DEUX_OPT();
        ~DEUX_OPT();
 
        void run()
        {
            while (!STOP)
            {
                // Algoritme
 
                _vue->updateGL();
                _vue->majPoids(poids);
            }
        }
};
Vue.h

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
#include "ui_FenetreDesigner.h"
 
class Vue : public QMainWindow
{
    Q_OBJECT
 
    private:
        Ui::VueClass _ui;
 
    public:
        Vue(QWidget * parent = 0);
        ~Vue();
 
        void updateGL()
        {
            _ui.widget->updateGL(); // Appel 'paintGL()'
        }
 
        void majPoids(int poids)
        {
            _ui.lineEdit->setText(QString::number(poids));
        }
};
Les classes ont été simplifiés.
Le bouton 'START' appelle la méthode 'start' du DEUX_OPT.


Si j'enlève le 'public QThread', la fenêtre openGL est rafraichit mais pas le lineEdit.

Merci.