Bonjour à tous.
J'ai commencé à concevoir un programme qui lit des partitions de musiques en faisant des bip sonores. Seulement, l'opération de lecture du fichier contenant un while (berk), j'ai du employer la classe QThread pour éviter que le programme ne freeze pendant la lecture. Avec l'aide de mon cher ami Alpounet, j'ai donc ainsi réussi à pondre ce code, qui ne marche pas plus que l'ancien car le programme freeze également à la manière de l'autre :
Code main.cpp : 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 #include <QApplication> #include <QtGui> #include "ui_FenBeep.h" #include "FenBeep.h" #include <windows.h> #include <cstdlib> #include <string> #include <iostream> #include <sstream> #include <fstream> #include <map> int readFile( const char *file ) { std::ifstream musicFile(file); if (! musicFile.is_open() ) return 1; //définitions de variables while ( std::getline( musicFile, line ) ) { //berk, c'est ici que j'ai ma boucle qui lit le fichier } return 0; } int main(int argc, char *argv[]) { QApplication app(argc, argv); FenBeep fenetre; fenetre.show(); return app.exec(); }
Code FenBeep.h : 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 #ifndef HEADER_FENCLIENT #define HEADER_FENCLIENT #include <QtGui> #include "ui_FenBeep.h" int readFile( const char *file ); class FenBeep : public QWidget, private Ui::FenBeep { Q_OBJECT public: FenBeep(QWidget *parent = 0); QString partition; private slots: void on_boutonSelect_clicked(); void on_boutonPlay_clicked(); private: Ui::FenBeep ui; }; class ThreadLecture : public QThread { Q_OBJECT public: ThreadLecture(const char*); const char* filename; public slots : void run(); signals : }; #endif
Code FenBeep.cpp : 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 #include <QApplication> #include <QString> #include <QtGui> #include "FenBeep.h" #include "ui_FenBeep.h" FenBeep::FenBeep(QWidget *parent) : QWidget(parent) { setupUi(this); setAttribute(Qt::WA_QuitOnClose); boutonPlay->setIcon(QIcon("icone-play.png")); } void FenBeep::on_boutonSelect_clicked() { partition = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString("music\\"), "Partitions Beep (*.bip)"); if (partition == NULL) { QMessageBox::warning(this, "Erreur", "La partition n'a pas pu être chargée."); } else { cheminPartition->setText(partition); } } void FenBeep::on_boutonPlay_clicked() { if (partition == NULL) { QMessageBox::warning(this, "Erreur", "Veuillez selectionner une partition"); } else { const char *file = partition.toStdString().c_str(); ThreadLecture monthread(file); monthread.run(); } } void ThreadLecture::run() { readFile(filename); } ThreadLecture::ThreadLecture( const char *fichier ) { filename = fichier; }
Auriez vous une quelconque idée de la provenance du freeze ? Je vous remercie.
Partager