Bonjour,
Je pense que ma question est assez simple à rédoudre mais elle met vraiment problématique donc je remercie ceux qui prendrons le temps de m'aider.
Dans ma quete d'apprentissage de Qt j'en suis au point du multithreading (j'en suis rendu là à cause du "ne repond pas" que j'ai cherché à résoudre) et là ça bloque, je comprends le fonctionnement global et l'utilisation mais au niveau de l'application concrète je n'y arrive pas en utilisant Qt Creator de mon coté.
ET ceux malgrès les exemples que j'ai pu trouver sur internet ou sur ce forum à ce sujet.
Je vais vous exposer où j'en suis afin que vous puissiez comprendre.
Ici je vais faire un projet très simple à titre d'exemple pour faire appel à un thread en utilisant les sigaux/slots.
J'ai donc un projet contenant un label, deux boutons "start" et "stop" :
Une fois que le bouton Start est pressé, un label va venir afficher un nombre de plus en plus important, jusqu'à ce que l'on presse le bouton "Stop"
main.cpp
MainWindow.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 #include <QApplication> #include "MainWindow.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow form; form.show(); return app.exec(); }
MainWindow.cpp
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 #ifndef COUROCR_H #define COUROCR_H #include <QApplication> #include <QWidget> #include <QPushButton> #include <QLabel> #include <QThread> class MainWindow : public QWidget { Q_OBJECT public: MainWindow(); QPushButton *m_boutonLancement; QPushButton *m_boutonStop; QLabel *m_texte; public slots: void lancementThread(); void arretThread(); }; #endif
Afin de me facilier la tache j'ai tenté de faire une nouvelle classe responsable du thread :
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 #include "mythread.h" #include "MainWindow.h" #include <QThread> void MainWindow::lancementThread() { //Le but serait le lancement du thread } void MainWindow::arretThread() { //Le but serait l'arret du thread } MainWindow::MainWindow() : QWidget() { m_boutonLancement = new QPushButton("Start", this); m_boutonLancement->move(50, 20); m_boutonStop = new QPushButton("Stop", this); m_boutonStop->move(100, 50); m_texte = new QLabel("0",this); m_texte->setGeometry(50, 100, 180, 70); connect(m_boutonLancement, SIGNAL(pressed()), this, SLOT(lancementThread())); connect(m_boutonStop, SIGNAL(pressed()), this, SLOT(arretThread())); }
MyThread.h
MyThread.cpp
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 #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread> class MyThread : public QThread { Q_OBJECT public: MyThread(); public slots: void stop(); void run(); }; #endif // MYTHREAD_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 #include "mythread.h" MyThread::MyThread() { } void MyThread::run(){ for (int i = 0; i< 100000 ;i++){ QString qNombre = QString::number(i); //Ici on vient ajouter 1 au label crée dans le MainWindow m_boutonLancement->setText(qNombre); } }
Je ne pense pas utiliser cela correctement pour les threads et je ne vois pas non plus comment venir fermer un thread en utilisant une sous classe comme ici.
Merci beaucoup à ceux qui prendront le temps de m'aider.
Partager