#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();
}