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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
connect(dir,SIGNAL(dirOpenned(const QString&)),
            this,SLOT(printFiles(const QString&)));
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&)),
            line,SLOT(setText(const QString&)));
Donc dirOpenned émet bien un signal. Le type d'argument est pourtant bien identique.

J'ai fait cette connection dans le constructeur de la classe suivante:


mainwidget.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
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++;
    }
}
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
#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
Merci pour votre aide

Edit: ah mais j'ai oublié la macro Q_OBJECT, je vais voir...