Forum Clubic

C++ Calculatrice

Salut a tous,

Depuis un petit moment je tente de faire une calculatrice GUI en C++ avec Qt et je n’y parvient pas.
Je ne comprend d’où peut provenir mon erreur car mon code C++ compile très bien mais c’est quand je fais des calcul que sa ne fonctionne plus :confused:
Sans plus attendre voici mon code :

main.cpp

#include <iostream>
#include <QtGui>
#include <QApplication>
#include "fenetreMain.h"

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

    QApplication app(argc, argv);

    QTranslator translator;
    translator.load("calculatrice_en");
    app.installTranslator(&translator);


    fenetreMain fenetre;
    fenetre.show();

    return app.exec();
}

fenetreMain.h

#ifndef FENETREMAIN_H_INCLUDED
#define FENETREMAIN_H_INCLUDED
#include <QtGui>
#include <iostream>

class fenetreMain : public QWidget
{
    Q_OBJECT

    public:
    fenetreMain();

    private slots:
    void slot1();
    void slot2();
    void slot3();
    void slot4();
    void slot5();
    void slot6();
    void slot7();
    void slot8();
    void slot9();
    void slot0();
    void slotm();
    void slota();
    void slotso();
    void slotd();
    void slote();

    private:
    QPushButton *boutonmul;
    QPushButton *boutonadi;
    QPushButton *boutondiv;
    QPushButton *boutonsou;
    QPushButton *bouton1;
    QPushButton *bouton2;
    QPushButton *bouton3;
    QPushButton *bouton4;
    QPushButton *bouton5;
    QPushButton *bouton6;
    QPushButton *bouton7;
    QPushButton *bouton8;
    QPushButton *bouton9;
    QPushButton *bouton0;
    QPushButton *boutonres;
    QPushButton *exit;
    QLineEdit *resultat;
    QString text;
    long bol;
    double cal;
    double cal2;
    double calr;
    bool ok;
    long impl;

};

#endif

fenetreMain.cpp

#include <QtGui>
#include <iostream>
#include "fenetreMain.h"

fenetreMain::fenetreMain()
{

boutonmul = new QPushButton("X");
boutonadi = new QPushButton("+");
boutonsou = new QPushButton("-");
boutondiv = new QPushButton("/");
bouton1 = new QPushButton("1");
bouton2 = new QPushButton("2");
bouton3 = new QPushButton("3");
bouton4 = new QPushButton("4");
bouton5 = new QPushButton("5");
bouton6 = new QPushButton("6");
bouton7 = new QPushButton("7");
bouton8 = new QPushButton("8");
bouton9 = new QPushButton("9");
bouton0 = new QPushButton("0");
exit = new QPushButton(tr("Quitter", "Utilisé pour le bouton de fermeture"));
boutonres = new QPushButton("=");
resultat = new QLineEdit();
QString text = "";
ok = 1;
bol = 0;
cal = 0;
cal2 = 0;
impl = 0;
calr = 0;

QLabel *label = new QLabel(tr("resultat:", ""));
resultat->setText("0");
resultat->setReadOnly(true);
QGridLayout *layout = new QGridLayout;

layout->addWidget(label, 1, 0);
layout->addWidget(resultat, 1, 1, 1, 3);
layout->addWidget(boutonadi, 2, 3);
layout->addWidget(boutonsou, 3, 3);
layout->addWidget(boutondiv, 4, 3);
layout->addWidget(boutonmul, 5, 3);
layout->addWidget(bouton1, 2, 0);
layout->addWidget(bouton2, 2, 1);
layout->addWidget(bouton3, 2, 2);
layout->addWidget(bouton4, 3, 0);
layout->addWidget(bouton5, 3, 1);
layout->addWidget(bouton6, 3, 2);
layout->addWidget(bouton7, 4, 0);
layout->addWidget(bouton8, 4, 1);
layout->addWidget(bouton9, 4, 2);
layout->addWidget(bouton0, 5, 0 );
layout->addWidget(boutonres, 5, 1);
layout->addWidget(exit, 5, 2);

setLayout(layout);

QObject::connect(exit, SIGNAL(clicked()), qApp, SLOT(quit()));
QObject::connect(bouton1, SIGNAL(clicked()), this, SLOT(slot1()));
QObject::connect(bouton2, SIGNAL(clicked()), this, SLOT(slot2()));
QObject::connect(bouton3, SIGNAL(clicked()), this, SLOT(slot3()));
QObject::connect(bouton4, SIGNAL(clicked()), this, SLOT(slot4()));
QObject::connect(bouton5, SIGNAL(clicked()), this, SLOT(slot5()));
QObject::connect(bouton6, SIGNAL(clicked()), this, SLOT(slot6()));
QObject::connect(bouton7, SIGNAL(clicked()), this, SLOT(slot7()));
QObject::connect(bouton8, SIGNAL(clicked()), this, SLOT(slot8()));
QObject::connect(bouton9, SIGNAL(clicked()), this, SLOT(slot9()));
QObject::connect(bouton0, SIGNAL(clicked()), this, SLOT(slot0()));
QObject::connect(boutonadi, SIGNAL(clicked()), this, SLOT(slota()));
QObject::connect(boutonsou, SIGNAL(clicked()), this, SLOT(slotso()));
QObject::connect(boutondiv, SIGNAL(clicked()), this, SLOT(slotd()));
QObject::connect(boutonmul, SIGNAL(clicked()), this, SLOT(slotm()));
QObject::connect(boutonres, SIGNAL(clicked()), this, SLOT(slote()));


setWindowTitle(tr("Calculatrice", ""));
setWindowIcon(QIcon("calc.ico"));
}

void fenetreMain::slot1()
    {

    text += "1";
    resultat->setText(text);

    }

void fenetreMain::slot2()
    {

    text += "2";
    resultat->setText(text);

    }

void fenetreMain::slot3()
    {

    text += "3";
    resultat->setText(text);

    }

void fenetreMain::slot4()
    {

    text += "4";
    resultat->setText(text);

    }

void fenetreMain::slot5()
    {

    text += "5";
    resultat->setText(text);

    }

void fenetreMain::slot6()
    {

    text += "6";
    resultat->setText(text);

    }

void fenetreMain::slot7()
    {

    text += "7";
    resultat->setText(text);

    }

void fenetreMain::slot8()
    {

    text += "8";
    resultat->setText(text);

    }

void fenetreMain::slot9()
    {

    text += "9";
    resultat->setText(text);

    }

void fenetreMain::slot0()
    {

    text += "0";
    resultat->setText(text);

    }

void fenetreMain::slota()
    {
    resultat->setText("+");
    bol = 1;

        if (impl == 0)
        {
            cal = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

        if (impl == 1)
        {
            cal2 = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

    }

void fenetreMain::slotso()
    {
    resultat->setText("-");
    bol = 2;

        if (impl == 0)
        {
            cal = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

        if (impl == 1)
        {
            cal2 = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

    }

void fenetreMain::slotm()
    {
    resultat->setText("X");
    bol = 3;

        if (impl == 0)
        {
            cal = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

        if (impl == 1)
        {
            cal2 = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

    }

void fenetreMain::slotd()
    {
    resultat->setText("/");
    bol = 4;

        if (impl == 0)
        {
            cal = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

        if (impl == 1)
        {
            cal2 = QString(text).toDouble(&ok);
            text = "";
            impl++;
        }

    }

void fenetreMain::slote()
    {
    resultat->setText("/");

        if (bol == 1)
        {
            calr = cal + cal2;
            text = QString::number(calr);
            resultat->setText(text);
            text = "";
        }

        if (bol == 2)
        {
            calr = cal - cal2;
            text = QString::number(calr);
            resultat->setText(text);
            text = "";
        }

        if (bol == 3)
        {
            calr = cal * cal2;
            text = QString::number(calr);
            resultat->setText(text);
            text = "";
        }

        if (bol == 4)
        {
            calr = cal / cal2;
            text = QString::number(calr);
            resultat->setText(text);
            text = "";
        }
    }

Pour un petit aperçut de son interface :
http://img40.xooimage.com/files/1/d/4/interface-7343ba.png

Merci d’avance pour votre aide.

Cordialement jyz93,

Je suppose que tu veux qu’on devine par nous même l’erreur? :slight_smile:

J’ai cherché pendant longtemps les erreurs de ce projet (notamment les erreurs de compilations…)
Je les ait trouvé mis a part celle si, je ne voit pas ce que sa peut être (au départ je pensais que c’était au moment ou je convertissais les variables en QString, mais bon j’ai vérifié et je pense pas)…
Donc je vous demande si vous avez au moins une petite idée de ce que sa peut être :confused:

Encore une fois, comme veut tu qu’on devine l’erreur? je ne vais pas compiler ce programme pour vérifier. Dis nous ce qui ne va pas, et je pense qu’on pourra t’aider dans la mesure du possible.

C’est a quel moment que l’erreur se produit ? Pour être plus préccis au cour de quel action ?
Edité le 28/11/2008 à 21:01

C’est pas une erreur de compilation c’étais une erreur de conversion de variable, je convertissais les variables pas au bont moment dans mon programme…

En faisant le programme de tête, sur 4+3=, on a:

  • départ impl = 0, cal = 0, cal = 0
  • 4 -> text=“4”
    • -> cal = 4, bol = 1, impl = 1, text = “”
  • 3 -> text=“3”
  • = -> calr = cal + cal2 = 4 (vu que 3 est pas ecnore dans cal2)

En gros le coup des if (impl == 1) devrait être dans le slot du égal (vu que les opérateurs ne terminent pas les calculs précédents), sinon faut il faut tapé “4+3+=” pour faire une addition.

Si non mon problème est résolu :wink:
merci quand même.