connect() qui ne marche pas
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:
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:
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:
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:
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...