要求:
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