<CalculatorDialog.h> 1 #ifndef _CALCULATORDIALOG_H_2 #define _CALCULATORDIALOG_H_ 3 4 #include <QDialog> 5 #include <QLabel> 6 #include <QPushButton> 7 #include <QLineEdit>// 输入文本的组件 8 #include <QDoubleValidator>//双精度的校验器 9 #include <QHBoxLayout>//水平布局器 10 11 class CalculatorDialog:public QDialog{ 12 Q_OBJECT//MOC编译器,把不符合标准的语法变成标准C++语法 13 public: 14 CalculatorDialog(void); 15 private: 16 QLineEdit* m_editX;//左操作数 17 QLineEdit* m_editY;//右操作数 18 QLabel* m_label;//操作符号 19 QPushButton* m_btnCalc;//等号按钮 20 QLineEdit* m_editZ;//保存结果,只读属性 21 private slots://声明私有的槽函数 22 void enableCalcButton(void);//使能等号按钮 23 void calcClicked(void);//计算结果 24 25 26 }; 27 #endif //_CALCULATORDIALOG_H_ <CalculatorDialog.cpp>
1 #include "CalculatorDialog.h" 2 //构造函数中初始化UI界面 3 CalculatorDialog::CalculatorDialog(void){ 4 //设置对话框的标题 5 setWindowTitle("加法计算器"); 6 m_editX = new QLineEdit(this); 7 //设置文本右对其 8 m_editX->setAlignment(Qt::AlignRight); 9 //设置验证器,只能输入数字 10 m_editX->setValidator(new QDoubleValidator(this)); 11 12 m_editY = new QLineEdit(this); 13 //设置文本右对其 14 m_editY->setAlignment(Qt::AlignRight); 15 //设置验证器,只能输入数字 16 m_editY->setValidator(new QDoubleValidator(this)); 17 18 m_editZ = new QLineEdit(this); 19 //设置文本右对其 20 m_editZ->setAlignment(Qt::AlignRight); 21 //设置验证器,只能输入数字 22 m_editZ->setValidator(new QDoubleValidator(this)); 23 m_editZ->setReadOnly(true);//设置只读 24 25 m_btnCalc = new QPushButton("=",this); 26 m_btnCalc->setEnabled(false);//设置禁用 27 28 m_label = new QLabel("+"); 29 //使用水平布局器,自动调整每个组件的大小和位置 30 //创建布局器 31 QHBoxLayout* layout = new QHBoxLayout; 32 //将组件顺序添加到布局器中 33 layout->addWidget(m_editX); 34 //layout->addWidget(new QLabel("+")); //也可以 35 layout->addWidget(m_label); 36 layout->addWidget(m_editY); 37 layout->addWidget(m_btnCalc); 38 layout->addWidget(m_editZ); 39 //设置布局器 40 setLayout(layout); 41 42 //编辑框内容改变时发出信号,尝试使能等号按钮 43 connect(m_editX,SIGNAL(textChanged(const QString&)),this, 44 SLOT(enableCalcButton())); 45 connect(m_editY,SIGNAL(textChanged(const QString&)),this, 46 SLOT(enableCalcButton())); 47 //点击等号按钮,计算结果并显示 48 connect(m_btnCalc,SIGNAL(clicked()),this,SLOT(calcClicked())); 49 } 50 // 51 void CalculatorDialog::enableCalcButton(void){ 52 bool bXok; 53 bool bYok; 54 //获取输入框的数据 55 //转换成 浮点数 56 m_editX->text().toDouble(&bXok); 57 m_editY->text().toDouble(&bYok); 58 //如果左右操作数都是有效的数字,使能等号按钮 59 if(bXok && bYok){ 60 m_btnCalc->setEnabled(true); 61 } 62 else{ 63 m_btnCalc->setEnabled(false); 64 65 } 66 } 67 68 void CalculatorDialog::calcClicked(void){ 69 double res = m_editX->text().toDouble() + 70 m_editY->text().toDouble(); 71 QString str = QString::number(res,'g',15); 72 //显示结果到m_editZ 73 m_editZ->setText(str); 74 } <Calculator.cpp> 1 #include <QApplication> 2 #include "CalculatorDialog.h" 3 4 int main(int argc,char** argv){ 5 6 QApplication app(argc,argv); 7 CalculatorDialog dialog; 8 dialog.show(); 9 return app.exec(); 10 11 12 } 上面这三个文件在同一个文件夹里 写完之后 1、qmake -project 2、将上步生成的pro文件(Calculator.pro) 添加 代码 QT += widgets 3、qmake 4、make 5、执行程序 Calculator |
|