bonjour,

Après avoir suivi le tutoriel sur Qt (notamment sur l'utilisation des signaux et slots), j'ai essayé de faire un petit widget personnalisé.

je voulais essayer de réaliser l'élément suivant :

- un QLabel avec un text

- Un QLineEdit pour afficher un chemin vers un fichier

- Un bouton "Parcourir"

l'appui sur le bouton "parcourir" déclenche l'ouverture d'un Qfiledialog::getOpenFileName qui est ensuite découpé en nom de fichier et chemin. ces deux éléments étant stockés dans l'object créé sour forme de QString.

lorsque je teste cet élément, graphiquement, cela correspond bien.

Par contre, l'appui sur le bouton "parcourir" ne déclenche pas la fonction "SelectFile()" qui est sensé déclencher l'affichage du QFileDialog.

dans le constructeur de l'objet, j'ai pourtant déclaré:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
connect(button, SIGNAL(Clicked()), this, SLOT(SelectFile()));
Donc, je m'attendrais avec cette ligne à ce que lors d'un clique sur le bouton, la fonction selectfile de mon objet soit déclenchée.

Hors, mon code ne rentre jamais dans la fonction SelectFile.

Je ne comprend pas pourquoi. quelle erreur ai-je pu commettre pour aboutir à ce fonctionnement ?

merci de votre aide,



voici le .h de mon object :
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
 
#ifndef UISELECTFILENAMEH_H
#define UISELECTFILENAMEH_H
 
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QFileDialog>
#include <QFileInfo>
#include <QHBoxLayout>
#include <QLineEdit>
 
class UISelectFileNameH : public QWidget
{
    Q_OBJECT
 
public:
    UISelectFileNameH(QString,QWidget *parent = 0);
 
public slots:
    void SelectFile();
 
private:
    QString FilePathName;
    QString FileName;
    QString FilePath;
    QPushButton *button;
    QLabel *lbl;
    QLineEdit *ledit;
};
#endif // UISELECTFILENAMEH_H
Voici le .cpp associé :
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 "uiselectfilenameh.h"
 
UISelectFileNameH::UISelectFileNameH(QString label,QWidget *parent): QWidget(parent)
{
    // définition du widget principal
    //QWidget *window = new QWidget;
 
    //Definition des éléments graphiques
    button = new QPushButton(tr("Parcourir"), this);
    button->setFont(QFont("Times", 18, QFont::Bold));
 
    lbl = new QLabel(label, this);
    lbl->setFont(QFont("Times", 18, QFont::Bold));
 
    ledit = new QLineEdit(this);
    ledit->setText(FilePathName);
 
    FilePathName="";
    connect(button, SIGNAL(Clicked()), this, SLOT(SelectFile()));
 
    // Positionnement des éléments
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(lbl);
    layout->addWidget(ledit);
    layout->addWidget(button);
}
 
void UISelectFileNameH::SelectFile()
{
    FilePathName = QFileDialog::getOpenFileName(this, "Sélectionner");
    QFileInfo Temp(FilePathName);
    FilePath = Temp.filePath();
    FileName = Temp.fileName();
}
Et voici le main pour etre complet :

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
// include éléments graphiques
#include "UI\uiselectfilenameh.h"
 
#include <QDebug>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
   // interface graphique
   //QCoreApplication app(argc, argv);
   QApplication app(argc, argv);
 
   //MainWidget widget;
   UISelectFileNameH *test1 = new UISelectFileNameH("Lecture : ");
   //widget.show();
   test1->show();
 
   return app.exec();
}