QT实现加法计算器

要求:
1.左右操作数只能输入数字形式的内容。
2.初始化等号按钮为禁用状态,等到左右操作数都输入有效数据时,再恢复按钮为正常可点击的状态。
3.点击等号按钮时,计算和显示结果。
4.分文件编程

calculator.h

#ifndef __CALCULATOR_H
#define __CALCULATOR_H

#include<QLabel>
#include<QPushButton>
#include<QLineEdit>
#include<QDoubleValidator>
#include<QFont>
#include<QHBoxLayout>
#include<QDialog>

class CalculatorDialog : public QDialog{
	Q_OBJECT
	public:
		CalculatorDialog(void);
	public slots:
		void enableButton(void);
		void calcClicked(void);
	private:
    QLineEdit* m_editX;//左操作数
    QLineEdit* m_editY;//右操作数
    QLineEdit* m_editZ;//显示结果
    QLabel* m_label;//"+"标签
    QPushButton* m_button;//"="按钮
    QHBoxLayout* m_layout;//水平布局器,用于自动调整大小和位置
};

#endif 

calculator.cpp

#include"calculator.h"

CalculatorDialog::CalculatorDialog(void){
	//界面初始化
	setWindowTitle("加法计算器");
	//设置字体大小
	QFont font;
	font.setPointSize(20);
	setFont(font);
	//左操作数
	m_editX = new QLineEdit(this);
	m_editX->setAlignment(Qt::AlignRight);//文本右对齐
	m_editX->setValidator(new QDoubleValidator(this));//设置验证器
	//右操作数
	m_editY = new QLineEdit(this);
	m_editY->setAlignment(Qt::AlignRight);//文本右对齐
	m_editY->setValidator(new QDoubleValidator(this));//设置验证器

	//显示结果
	m_editZ = new QLineEdit(this);
	m_editZ->setAlignment(Qt::AlignRight);//文本右对齐
	m_editZ->setReadOnly(true);

	//"+"
	m_label=new QLabel("+",this);
	//"="
	m_button = new QPushButton("=",this);
	m_button->setEnabled(false);

	//使用布局器
	m_layout = new QHBoxLayout(this);
	//将控件按水平方向(从左向右)依次添加到布局器
	m_layout->addWidget (m_editX);
	m_layout->addWidget (m_label);
	m_layout->addWidget (m_editY);
	m_layout->addWidget (m_button);
	m_layout->addWidget (m_editZ);
	//设置布局器
	setLayout(m_layout);




	//信号和槽连接
	//左右操作数文本改变时,发送信号textChanged(QString)
	//注:如果连接的槽函数是当前父窗口中自定义的,那么第三个参数一定
	//是this.
	connect(m_editX,SIGNAL(textChanged(QString)),
			this,SLOT(enableButton(void)));
	connect(m_editY,SIGNAL(textChanged(QString)),
			this,SLOT(enableButton(void)));
	//点击等号按钮,发送信号clicked()
	connect(m_button,SIGNAL(clicked(void)),
			this,SLOT(calcClicked(void)));
}

void CalculatorDialog::enableButton(void){
	bool bXOk;//记录左操作数是否输入了有效数据
	bool bYOk;//记录右操作数是否输入了有效数据
	//text():获取文本内容(QString)
	//toDouble():将QString转换为double,参数保存转换是否成功结果
	m_editX->text().toDouble(&bXOk);
	m_editY->text().toDouble(&bYOk);
	//如果左右操作数都输入了有效数据,则恢复按钮为正常可用状态,否则
	//设置为禁用状态.
	m_button->setEnabled(bXOk && bYOk);
}

void CalculatorDialog::calcClicked(void){
	//计算相加结果
	double res = m_editX->text().toDouble() + 
		m_editY->text().toDouble();
	//将数字结果转换为字符串
	//number():将double转换为QString
	QString str = QString::number(res);
	//显示结果
	//setText():设置控件要显示的文本
	m_editZ->setText(str);
}

main.cpp

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

int main (int argc,char *argv[]){
	QApplication app(argc,argv);
	CalculatorDialog dialog;
	dialog.show();
	
	return app.exec();
}

qmake -project
工程文件(.pro)中加 “QT +=widgets”
qmake
make
./Calculator

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值