Qt学习 第9节:计算器实现

#ifndef CALCULATORDIALOG_H
#define CALCULATORDIALOG_H

#include <QDialog>
#include <QLineEdit>
#include <QLabel>
#include <QPushButton>
#include <QDoubleValidator>//验证器
#include <QHBoxLayout>//水平布局其

class CalculatorDialog : public QDialog
{
    Q_OBJECT
    //moc元对象编译器,把信号和槽函数转为变为标准C++语法
public:
    CalculatorDialog(QDialog *parent = 0);
    ~CalculatorDialog();

private:
    QLineEdit* m_augend;//被加数
    QLabel* m_add;//“+”符号
    QLineEdit* m_addend;//加数
    QPushButton* m_equal;//“=”按钮
    QLineEdit* m_result;//结果

//signals:

public slots:
    void EnableButton(void);//当加数和被加数都为有效值时,让按钮激活
    void CalculateClicked(void);//点击按钮,计算结果
};

#endif // CALCULATORDIALOG_H
#include "CalculatorDialog.h"
//构造函数
CalculatorDialog::CalculatorDialog(QDialog *parent) : QDialog(parent)
{
    //界面初始化
    this->setWindowTitle("Calculator");//设置窗口标题
    m_augend = new QLineEdit(this);//被加数父窗口为当前出窗口
    m_augend->setAlignment(Qt::AlignRight);//设置靠右对其
    m_augend->setValidator(new QDoubleValidator(this));//设置数字验证器,只能输入数字形式内容

    m_add = new QLabel("+",this);

    m_addend = new QLineEdit(this);
    m_addend->setAlignment(Qt::AlignRight);
    m_addend->setValidator(new QDoubleValidator(this));

    m_equal = new QPushButton("=",this);
    m_equal->setEnabled(false);//按钮状态设置为Disable

    m_result = new QLineEdit(this);
    m_result->setAlignment(Qt::AlignRight);
    m_result->setReadOnly(true);
    //创建布局器:自动调用每个控件的大小和位置
    QHBoxLayout* layout = new QHBoxLayout(this);//按水平方向,依此将控件添加到布局器中
    layout->addWidget(m_augend);
    layout->addWidget(m_add);
    layout->addWidget(m_addend);
    layout->addWidget(m_equal);
    layout->addWidget(m_result);
    this->setLayout(layout);
    //当单行文本框中值发生改变时,激活按钮
    connect(m_augend,SIGNAL(textChanged(QString)),this,SLOT(EnableButton(void)));
    connect(m_addend,SIGNAL(textChanged(QString)),this,SLOT(EnableButton(void)));
    connect(m_equal,SIGNAL(clicked()),this,SLOT(CalculateClicked(void)));
}
void CalculatorDialog::EnableButton(void)
{
    bool Ism_augendANumber,Ism_addendANumber;
    //text():获取输入文本(QString)
    //toDouble():QString转换为double,参数保存转换是否成功的结果
    m_augend->text().toDouble(&Ism_augendANumber);
    m_addend->text().toDouble(&Ism_addendANumber);
    m_equal->setEnabled(Ism_augendANumber && Ism_addendANumber);//当被加数和加数都是数字时,按钮激活
 }

void CalculatorDialog::CalculateClicked(void)
{
    double result = m_augend->text().toDouble()+m_addend->text().toDouble();//字符串转数字相加
    QString string = QString::number(result);//数字再转字符串
    m_result->setText(string);//显示字符串
}

CalculatorDialog::~CalculatorDialog()
{

}
#include "CalculatorDialog.h"
#include <QApplication>

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

    CalculatorDialog window;
    window.show();

    return app.exec();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值