Ouvrir une QFiledialog lors d'un appui sur un bouton QPushButton
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:
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:
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:
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:
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();
} |