Salut, je travaille sur un logiciel qui lit un fichier pour le modifier et le sauvegarder. J'essaie donc de connecter le signal clicked() d'un bouton de ma classe fenetre au slot de ma classe fichier, ce slot est selectFile(), il permet simplement de choisir le fichier avec l'explorateur pour stocker le chemin dans un QString.
Le programme compile bien mais affiche QObject::connect: No such slot QFile::selectFile() lors de l'exécution et le bouton ne répond pas, il ne se passe rien.
J'ai choisit des noms de classe nuls par contre, comme Mywin pour la fenetre, pas la peine de me le préciser, j'avais juste pas envie de tout changer et de m'embrouiller davantage. Et aussi ma classe fichier (Myfile) hérite de QWidget car elle doit pouvoir utiliser getOpenFileName(), cette méthode est utilisée par le slot selectFile() justement.
Mywin.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
24
25
26
27
28
29
30
31
32 #ifndef DEF_MAFENETRE #define DEF_MAFENETRE #include <QApplication> #include <QWidget> #include <QPushButton> #include <QMessageBox> #include <QString> #include <QTextStream> #include <QComboBox> #include <QFile> #include "myfile.h" class Mywin : public QWidget { Q_OBJECT public: Mywin(); int getIndex(); private: QPushButton *m_button1; QPushButton *m_button2; QPushButton *m_button3; QComboBox *m_scrollList ; QFile *m_file; }; #endif
Mywin.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
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include "mywin.h" #include "myfile.h" Mywin::Mywin() : QWidget() { setFixedSize(500, 250); m_button1 = new QPushButton("choix 1", this); m_button2 = new QPushButton("choix 2", this); m_button3 = new QPushButton("choix 3", this); m_button1->move(60,40); m_button2->move(60,80); m_button3->move(160,180); m_scrollList = new QComboBox(); QString chaine1 = "texte1"; QString chaine2 = "texte2"; QString chaine3 = "texte3"; QStringList strlist = (QStringList() << chaine1 << chaine2 << chaine3) ; m_scrollList->addItems(strlist); m_scrollList->setCurrentIndex(2); m_file = new QFile(); QObject::connect(m_button1, SIGNAL(clicked()), qApp, SLOT(quit())) ; QObject::connect(m_button2, SIGNAL(clicked()), m_file, SLOT(selectFile())) ; QObject::connect(m_button3, SIGNAL(clicked()), m_file, SLOT(saveFile())) ; } int Mywin::getIndex(){ int index = m_scrollList->currentIndex(); return index; }
Myfile.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
24
25
26
27
28
29
30
31
32
33 #ifndef MYFILE_H #define MYFILE_H #include <QApplication> #include <QWidget> #include <QString> #include <QFileDialog> #include <QFile> #include <QTextStream> #include <QDataStream> #include "mywin.h" class Myfile : public QWidget { Q_OBJECT public: Myfile(); public slots: void selectFile(); void saveFile(); private: QFile *file; QTextStream m_stream; QDataStream m_datastream; }; #endif // MYFILE_H
Myfile.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
27
28
29
30
31
32
33
34
35 #include "myfile.h" Myfile::Myfile() { } void Myfile::selectFile(){ QString chemin = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "*.txt"); file = new QFile(chemin); file->open(QIODevice::ReadWrite); } void Myfile::saveFile(){ QString offset = "0x23"; bool ok; uint offsetdec = offset.toUInt(&ok, 16); QTextStream m_stream(file); m_stream.seek(offsetdec); QDataStream m_datastream(file); Mywin wnd; int indexListe = wnd.getIndex(); quint16 number = indexListe; m_datastream << number; file->close(); }
Partager