2011-07-20 20 views
0

QT4で簡単な電卓を作成しようとしています。ユーザーは2つの数字を入力し、計算を行う4つのコマンドボタンがあります。 (+ - * /)。私のコードは次のとおりです。QT4でC++の簡単な電卓

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を取得し、このプログラムを実行すると黒いスクリーン。私を助けてくれますか?あなたがerrorQErrorMessageのインスタンスを割り当てることはありません

int1Entry = new QLineEdit; 
int2Entry = new QLineEdit; 

:あなたのコンストラクタの先頭に以下を追加します

QLineEdit* int1Entry; 
QLineEdit* int2Entry; 

+3

回答を判読可能な形式にするまでは助けがありません:P –

+0

どうすればよいですか? –

答えて

3

問題は、次の項目のインスタンスを作成したことがないということですどちらかを使用することはありませんので、後で注意してください。

+0

非常にありがとうございます –

+0

私はあなたのコメントにすべてがあるとは思わない、それは不完全なので、私はあなたが何を求めているか完全にはわからない。 –

+0

0で割ったときにエラーメッセージを出力するためにこれを追加しました:void Calculator :: division() { QString strFisrt = int1Entry-> text(); QString strSecond = int2Entry-> text(); bool ok; ! int型I = strSecond.toInt(&ok); 場合(OK){ エラー=新しいQErrorMessage(この); エラー - > showMessage( "許可され​​ていないゼロ除算");} int型数値1 = strFisrt.toInt( &ok); INT数値2 = strSecond.toInt(&ok); INT結果=数値1 /数値2; QStringのstrResult; strResult = strResult.number(結果); lineoutput->ディスプレイ(I); } –