Bonjour,
La fonction (slot) printFiles() ne se lance pas lorsque dirOppenned() émet un signal.
Je les ai connecté comme ci: (dir est dérivée de QDir, this est dérivé de QWidget)
Pourtant la connection suivante fonctionne: (line est dérivée de QLineEdit)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 connect(dir,SIGNAL(dirOpenned(const QString&)), this,SLOT(printFiles(const QString&)));
Donc dirOpenned émet bien un signal. Le type d'argument est pourtant bien identique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 connect(dir,SIGNAL(dirOpenned(const QString&)), line,SLOT(setText(const QString&)));
J'ai fait cette connection dans le constructeur de la classe suivante:
mainwidget.cpp
mainwidget.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include <QApplication> #include <QString> #include <QVBoxLayout> #include <QTreeWidgetItem> #include <QPushButton> #include <QStringList> #include <QList> #include "mainwidget.h" MainWidget::MainWidget(QWidget* parent) : QWidget(parent) { line = new Line; dir = new Dir; tree = new Tree; connect(line,SIGNAL(lineValidated(QString&)), dir,SLOT(openDir(QString&))); connect(dir,SIGNAL(dirOpenned(const QString&)), line,SLOT(setText(const QString&))); connect(dir,SIGNAL(dirOpenned(const QString&)), this,SLOT(printFiles(const QString&))); QPushButton *quit = new QPushButton("Quit"); connect(quit,SIGNAL(clicked()),qApp,SLOT(quit())); QVBoxLayout* layout = new QVBoxLayout; layout->addWidget(line); layout->addWidget(quit); layout->addWidget(tree); setLayout(layout); } void MainWidget::printFiles(const QString& str) { tree->clear(); tree->setHeaderLabel("TEST"); QStringList files = dir->entryList(QDir::Files); QList<QTreeWidgetItem*> items; QStringList::iterator it_files; QList<QTreeWidgetItem*>::iterator it_items = items.begin(); for(it_files = files.begin(); it_files <= files.end(); it_files++) { *it_items = new QTreeWidgetItem(tree); (*it_items)->setText(0,*it_files); it_items++; } }
Merci pour votre aide
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 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include "line.h" #include "dir.h" #include "tree.h" class MainWidget : public QWidget { public: MainWidget(QWidget* parent = 0); public slots: void printFiles(const QString&); private: Dir* dir; Line* line; Tree* tree; }; #endif //MAINWIDGET_H
Edit: ah mais j'ai oublié la macro Q_OBJECT, je vais voir...
Partager