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é:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part connect(button, SIGNAL(Clicked()), this, SLOT(SelectFile()));
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 :
#endif // UISELECTFILENAMEH_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 #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; };
Voici le .cpp associé :
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
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(); }
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(); }
Partager