Afficher une fenetre créée sous Qt Designer (v5.3.1 de Qt)

Résolu/Fermé
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 - Modifié par hharchi9 le 3/07/2014 à 11:04
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 4 juil. 2014 à 14:05
Bonjour à tous,

Je me suis lancé dans la programmation il y a peu (je suis l'un des nombreux tuto du site du zéro : https://openclassrooms.com/fr/courses/1894236-programmez-avec-le-langage-c/1901673-modelisez-ses-fenetres-avec-qt-designer

Je suis arrivé à l'étape de création d'une fenêtre avec Qt Designer mais le soucis c'est que je n'arrive pas à afficher cette fenêtre... En effet lors de la compilation j'ai des erreurs comme celle-ci :

C:\Users\Alan\Documents\Programmation\GUI\test 2\test2\FenCalculatrice.cpp:6: erreur : no matching function for call to 'Ui::FenCalculatrice::setupUi(FenCalculatrice* const)'
ui->setupUi(this);
^

J'utilise la version 5.3.1 de Qt et la version 3.1.2 de Qt Creator (j'utilise le Qt Designer directement depuis le Qt Creator). Je suis sous windows 7.

Je vous joins mes lignes de codes car il y a forcément une erreur quelque part (excusez-moi encore une fois mais je débute et mes recherches ne m'ont pas apporté de réponse, d'où ma démarche ici)


Le FenCalculatrice.h

#ifndef FENCALCULATRICE_H
#define FENCALCULATRICE_H

#include <QWidget>

namespace Ui
{
class FenCalculatrice;
}

class FenCalculatrice : public QWidget
{
Q_OBJECT

public:

explicit FenCalculatrice(QWidget *parent = 0);
~FenCalculatrice();

private:

Ui::FenCalculatrice *ui;
};

#endif // FENCALCULATRICE_H


Le FenCalculatrice.cpp

#include "FenCalculatrice.h"
#include "ui_FenCalculatrice.h"

FenCalculatrice::FenCalculatrice(QWidget *parent) : QWidget(parent), ui(new Ui::FenCalculatrice)
{
ui->setupUi(this);
}

FenCalculatrice::~FenCalculatrice()
{
delete ui;
}


Le main.cpp

#include <QApplication>
#include <QtWidgets>
#include "FenCalculatrice.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

FenCalculatrice fenetre;
fenetre.show();

return app.exec();
}


Je vous joins également le .pro :

QT+= widgets
QT+= widgets gui
QT+= core gui


SOURCES += \
main.cpp \
FenCalculatrice.cpp

HEADERS += \
FenPrincipale.h \
FenCalculatrice.h

FORMS += \
FenCalculatrice.ui



Merci d'avoir pris le temps de me lire et de vous pencher sur la question,

Cordialement,

hharchi9
A voir également:

7 réponses

sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
3 juil. 2014 à 13:58
Bonjour
Personnellement je ne veux pas être désagréable même si je connais la réponse il est préférable d'allée la poser sur leur forum la questions directement. Je pense qu'ils seront plus aptes à te répondre.
Après c'est à toi d'en jugé.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 juil. 2014 à 14:26
Si tu connais la réponse, donne-la !
Il n'y a aucune raison de ne pas poser sa question ici...
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 3/07/2014 à 14:57
je sais bien, sauf qu'à chaque fois qu'ils font affaire à un tutoriel du site du zéro, et qu'ils sont bloqué la moindre des choses est de poser la question directement sur le forum en question au lieu de le faire ici et son problème est de type programmation le compilateur essaye d'appeller une fonction
Ui::FenCalculatrice::setupUi(FenCalculatrice* const)' 
qui me semble n'est pas définie , mal écrite, pas du tout écrite où existe pas -_- !
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
3 juil. 2014 à 15:49
Merci du temps que vous m'accordez. Désolé sambia39, je ne pensais pas à mal et ne m'était pas poser de question en postant ici, toutes mes excuses donc.

Je précise que les codes sont données en tant que solution de l'exercice mais il me semble qu'ils utilisent une version antérieure d'où le fait que cela ne marche pas pour moi, mais mes recherches ne m'ont pas permis de trouver une solution.

Aussi, si tu avais trouvé une solution, je te saurais gré de la donner pour moi mais aussi pour d'autres qui pourrais rencontrer le même soucis.

Encore une fois désolé pour la gêne occasionnée, je ne pensais pas à mal...
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
3 juil. 2014 à 16:03
C'est plutôt moi qui m'excuse je me suis égaré un peu.
Ceci dit ton problème est de type "programmation" le compilateur ne trouve pas une correspondance ou une de tes fonctions que tu as déclarée.
Dans mes souvenirs de Qt si j'ai bonne mémoire , si tu veux utiliser l'ancienne configuration il faudrait ajouter dans ton fichier
.pro
cette ligne
Qt += greaterThan(QT_MAJOR_VERSION, 4)
il me semble
ou
greaterThan(QT_MAJOR_VERSION, 4) 
QT += widgets
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
3 juil. 2014 à 16:12
J'ai essayé de rentrer cette ligne des deux façons et même d'une autre trouvée sur internet mais ca me donne toujours la même erreur...
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
3 juil. 2014 à 16:24
Ok alors poste l'ensemble de ton code entre les balises code ici en les utilisant comme ceci

 <code cpp>  ton code ici < / code> 
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
3 juil. 2014 à 16:29
Ok, voici le main.cpp

 #include <QApplication>
#include <QtWidgets>
#include "FenCalculatrice.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    FenCalculatrice fenetre;
    fenetre.show();

    return app.exec();
}


Le FenCalculatrice.h

#ifndef FENCALCULATRICE_H
#define FENCALCULATRICE_H

#include <QWidget>

namespace Ui
{
    class FenCalculatrice;
}

class FenCalculatrice : public QWidget
{
    Q_OBJECT

    public:

    explicit FenCalculatrice(QWidget *parent = 0);
    ~FenCalculatrice();

    private:

    Ui::FenCalculatrice *ui;
};

#endif // FENCALCULATRICE_H


Le FenCalculatrice.cpp

#include "FenCalculatrice.h"
#include "ui_FenCalculatrice.h"

FenCalculatrice::FenCalculatrice(QWidget *parent) : QWidget(parent), ui(new Ui::FenCalculatrice)
{
    ui->setupUi(this);
}

FenCalculatrice::~FenCalculatrice()
{
    delete ui;
}


Le .pro

QT+= widgets gui
QT+= core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

SOURCES += \
    main.cpp \
    FenCalculatrice.cpp

HEADERS += \
    FenPrincipale.h \
    FenCalculatrice.h

FORMS += \
    FenCalculatrice.ui
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
3 juil. 2014 à 16:37
Le débogueur signale l'erreur à cette ligne du FenCalculatrice.cpp
  ui->setupUi(this); 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 juil. 2014 à 16:28
Pardon d'avoir été un peu sec :-/
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
3 juil. 2014 à 19:51
Bon je te donne la solution toute simple, déjà dans ton fichier
.pro
il faudrait ajouté ceci.


greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
QT += core gui
Ensuite dans tes fichiers respectifs tu dois implémenter correctement les méthodes donc comme ceci
fichier.h


namespace Ui {
class fen;
}

class fen : public QMainWindow  /* ou ce que tu veux */
{
    Q_OBJECT
    
public:
    explicit fen(QWidget *parent = 0);
    ~fen(void);
    
private:
    Ui::fen *pUi;
};


fichier.cpp

/***
*   Constructeur
***/
fen::fen(QWidget *parent) :QMainWindow(parent),ui(new pUi::fen)
{
    this->pUi->setupUi(this);
}

/***
*   Destructeur
***/
fen::~fen(void)
{
    delete this->pUi;
}


et dans le main


int main(int argc, char *argv[])
{
    QApplication appFen(argc, argv);
    fen test;
    test.show();
    
    return appFen.exec();
}


Et normalement ça doit compilé.
Pour ton code je ne sais pas mais peut tu nous préciser exactement ce que tu a ajouté comme ligne de code ?
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
3 juil. 2014 à 22:10
Tout d'abord, merci à toi de te décarcasser sur mon problème !

Je crois que le sort s'acharne sur moi... Avec ton code j'ai d'autres erreurs qui apparaissent :

C:\Users\Alan\Documents\Programmation\GUI\test 2\test2\FenCalculatrice.cpp:7: erreur : class 'FenCalculatrice' does not have any field named 'ui'
FenCalculatrice::FenCalculatrice(QWidget *parent) :QDialog(parent),ui(new pUi::FenCalculatrice)
^

C:\Users\Alan\Documents\Programmation\GUI\test 2\test2\FenCalculatrice.cpp:7: erreur : expected type-specifier before 'pUi'
FenCalculatrice::FenCalculatrice(QWidget *parent) :QDialog(parent),ui(new pUi::FenCalculatrice)
^


En fait, il y a également un fichier.ui dans le projet (créé par le QtDesigner au moment de la création de ma fenêtre c'est ce fichier qui contient toutes les données sur leur agencement) et je ne vois aucune référence vers ce fichier si ce n'est le
 #include "ui_FenCalculatrice.h" 

dans le FenCalculatrice.h (mon fichier ui s'appelle FenCalculatrice.ui)

Je n'ai absolument rien changer au code qu'ils ont fourni : j'ai tout créé étape par étape en suivant le tuto (qui je crois est réalisé sous Qt4). Mes composants ont le même nom et je n'est rien implémenté de plus ou de moins. pour le moment je n'ai même pas ajouter de connexion entre les widgets, je tente juste d'afficher la fenêtre...

PS : en testant ton code, j'ai d'abord tout remplacé et tout écrasé mais je me retrouvait avec une liste de 6 erreurs. Ensuite, j'ai remplacé les "fen" par des "FenCalculatrice" ce qui a eu pour effet de ne sortir que les deux erreurs que j'ai copier ci-dessus
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
3 juil. 2014 à 22:16
tu utilise du QWidget ou QMainwindows
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
3 juil. 2014 à 22:43
La fenêtre est un QDialog vide mais je l'ai changé dans ton code ça aussi
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
4 juil. 2014 à 00:21
tu ma pas compris ta classe principale hérite de quoi
class fen public QMainwindow

ou
class fen public Qwidget
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
4 juil. 2014 à 10:42
Ah oui j'avais pas compris ma classe hérite de Qwidget
0
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
4 juil. 2014 à 10:44
Cependant j'ai toujours les même erreurs...
0