C ++ простой калькулятор в QT4 - PullRequest
0 голосов
/ 21 июля 2011

Я пытаюсь создать простой калькулятор в QT4.Пользователь вводит 2 цифры и есть 4 командные кнопки, которые выполняют вычисления.(+ - * /).Мой код:

calculator.h

#ifndef CALCULATOR_H
#define CALCULATOR_H

#include QWidget
#include QGridLayout
#include QLineEdit
#include QLabel
#include QPushButton
#include QLCDNumber
#include QString
#include QMessageBox
#include QErrorMessage

class Calculator : public QWidget {

Q_OBJECT

public:

//constructor

Calculator();

public slots:

//function to add the two numbers that the user inputs

void addition();

//function to subtract the two numbers that the user inputs

void subtraction();

//function to multiply the two numbers that the user inputs

void multiply();

//function to divide the two numbers that the user inputs

void division();

//function to clear widgets

void clearFields();

//function to close window

void close();

private:

QLineEdit* int1Entry;
QLineEdit* int2Entry;
QLCDNumber* lineoutput;
QErrorMessage* error;

};

#endif

calculator.cpp

#include "Calculator.h"

//constructor

Calculator::Calculator() {

//{initializes and places widgets using a layout

    setWindowTitle("Simple Calculator");
    QGridLayout* layout = new QGridLayout;
    QPushButton* additionButton = new QPushButton("+");
    QPushButton* subtractionButton = new QPushButton("-");
    QPushButton* multiplicationButton = new QPushButton("*");
    QPushButton* divisionButton = new QPushButton("/");

    lineoutput = new QLCDNumber;

    //result->setBinMode();

    lineoutput->setSegmentStyle(QLCDNumber::Flat);
    lineoutput->setDigitCount(8);
    QPushButton* clear = new QPushButton("Clear");
    QPushButton* close = new QPushButton("Close");
    layout->addWidget(int1Entry, 2,1);
    layout->addWidget(int2Entry, 3,1);
    layout->addWidget(additionButton, 0,2);
    layout->addWidget(subtractionButton, 1,2);
    layout->addWidget(multiplicationButton, 2,2);
    layout->addWidget(divisionButton, 3,2);
    layout->addWidget(new QLabel, 1, 0); //for spacing
    layout->addWidget(lineoutput,3,0);
    layout->addWidget(close, 4,1);
    layout->addWidget(clear, 4,2);
    setLayout(layout);

    //}

    //{connect signals and slots

    connect(additionButton, SIGNAL(clicked()), this, SLOT(addition()));
    connect(subtractionButton, SIGNAL(clicked()), this, SLOT(subtraction()));
    connect(multiplicationButton, SIGNAL(clicked()), this, SLOT(multiply()));
    connect(divisionButton, SIGNAL(clicked()), this, SLOT(division()));
    connect(clear, SIGNAL(clicked()), this, SLOT(clearFields()));
    connect(close, SIGNAL(clicked()), this, SLOT(close()));

    //}

}

//function to add the two numbers

void Calculator::addition()
{

    QString strFisrt = int1Entry->text();
    QString strSecond = int2Entry->text();
    bool ok;

    int number1 = strFisrt.toInt(&ok);
    int number2 = strSecond.toInt(&ok);
    int result = number1 + number2;

    QString strResult;

    strResult = strResult.number(result);
    lineoutput->display(strResult);
}

//function to subtract the two numbers

void Calculator::subtraction()

{
        QString strFisrt = int1Entry->text();
        QString strSecond = int2Entry->text();
        bool ok;

        int number1 = strFisrt.toInt(&ok);
        int number2 = strSecond.toInt(&ok);
        int result = number1 - number2;
        QString strResult;
        strResult = strResult.number(result);
        lineoutput->display(strResult);
}

//function to multiply the two numbers

void Calculator::multiply()

{
    QString strFisrt = int1Entry->text();
    QString strSecond = int2Entry->text();

        bool ok;

        int number1 = strFisrt.toInt(&ok);
        int number2 = strSecond.toInt(&ok);
        int result = number1 * number2;

        QString strResult;

        strResult = strResult.number(result);
        lineoutput->display(strResult);
}

//function to divide the two numbers

void Calculator::division()

{
    QString strFisrt = int1Entry->text();
    QString strSecond = int2Entry->text();

        bool ok;

        int number1 = strFisrt.toInt(&ok);
        int number2 = strSecond.toInt(&ok);
        int result = number1 / number2;

        QString strResult;
        strResult = strResult.number(result);
        lineoutput->display(strResult);
}

//clear widgets

void Calculator::clearFields(){

    int1Entry->clear();
    int2Entry->clear();
    lineoutput->display(0);
}

//close window

void Calculator::close(){

    exit(0);
}

main.cpp

#include <QApplication>
#include "calculator.h"

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

{

    QApplication app(argc, argv);
    Calculator w;
    w.show();
    return app.exec();
}

При запускеПрограмма, которую я получаю пустой Ms-Dos черный экран.Можете ли вы помочь мне, пожалуйста?

1 Ответ

3 голосов
/ 21 июля 2011

Проблема в том, что вы никогда не создаете экземпляры следующих элементов:

QLineEdit* int1Entry;
QLineEdit* int2Entry;

Добавьте следующее в начало вашего конструктора:

int1Entry = new QLineEdit;
int2Entry = new QLineEdit;

Вы никогда не назначаете экземплярQErrorMessage до error, но вы никогда не используете его, так что следите за этим позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...