QT4中的C ++简单计算器

时间:2011-07-20 22:56:34

标签: c++ qt4

我想在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 个答案:

答案 0 :(得分:3)

问题是您永远不会创建以下项目的实例:

QLineEdit* int1Entry;
QLineEdit* int2Entry;

将以下内容添加到构造函数的开头:

int1Entry = new QLineEdit;
int2Entry = new QLineEdit;

您永远不会将QErrorMessage的实例分配给error,但您从不使用它,因此请稍后注意。