[C++] 实现简单计算器 →→→→→进入此内容的聊天室

来自 , 2020-04-26, 写在 C++, 查看 128 次.
URL http://www.code666.cn/view/c3395dd4
  1. /*
  2.  * ������
  3.  * ʵ�ּ��������ù���
  4.  * ������ʵ�ֺ������Ĵ���
  5.  * ������Qt Creator
  6.  * Lzy          2011-8-26
  7.  */
  8.  
  9. #include "widgetcounter.h"
  10. #include "ui_widgetcounter.h"
  11. #include <QObject>
  12. #include <QString>
  13.  
  14. WidgetCounter::WidgetCounter(QWidget *parent) :
  15.     QWidget(parent),
  16.     ui(new Ui::WidgetCounter)
  17. {
  18.     ui->setupUi(this);
  19.     ui->lEditPlay->setText("0");    //��ʼ�� ��ʾ0
  20.     num = num1 = num2 = 0;
  21.     f_point = f_num = false;
  22.     op = 0;
  23.     times = 1;
  24.     QObject::connect(this,SIGNAL(NumClick(int)), this, SLOT(Counter(int))); //�ź����۴�������
  25. }
  26.  
  27. WidgetCounter::~WidgetCounter()
  28. {
  29.     delete ui;
  30. }
  31.  
  32. void WidgetCounter::changeEvent(QEvent *e)
  33. {
  34.     QWidget::changeEvent(e);
  35.     switch (e->type()) {
  36.     case QEvent::LanguageChange:
  37.         ui->retranslateUi(this);
  38.         break;
  39.     default:
  40.         break;
  41.     }
  42. }
  43.  
  44. /*��ֵ����*/
  45. void WidgetCounter::Counter(int i)
  46. {
  47.     if(!f_point)
  48.     {
  49.         if(!f_num)
  50.         {
  51.             num1 = num1 * 10 + i;
  52.             ui->lEditPlay->setText(QString::number(num1));
  53.         }
  54.         else
  55.         {
  56.             num2 = num2 * 10 + i;
  57.             ui->lEditPlay->setText(QString::number(num2));
  58.         }
  59.     }
  60.     else
  61.     {
  62.         times *= 10;
  63.         if(!f_num)
  64.         {
  65.             num1 = num1 + i/times;
  66.             ui->lEditPlay->setText(QString::number(num1));
  67.         }
  68.         else
  69.         {
  70.             num2 = num2 + i/times;
  71.             ui->lEditPlay->setText(QString::number(num2));
  72.         }
  73.     }
  74. }
  75.  
  76. /*���ֽ�����*/
  77. void WidgetCounter::on_Btn1_clicked()
  78. {
  79.     emit NumClick(1);
  80. }
  81.  
  82. void WidgetCounter::on_Btn2_clicked()
  83. {
  84.     emit NumClick(2);
  85. }
  86.  
  87. void WidgetCounter::on_Btn3_clicked()
  88. {
  89.     emit NumClick(3);
  90. }
  91.  
  92. void WidgetCounter::on_Btn4_clicked()
  93. {
  94.     emit NumClick(4);
  95. }
  96.  
  97. void WidgetCounter::on_Btn5_clicked()
  98. {
  99.     emit NumClick(5);
  100. }
  101.  
  102. void WidgetCounter::on_Btn6_clicked()
  103. {
  104.     emit NumClick(6);
  105. }
  106.  
  107. void WidgetCounter::on_Btn7_clicked()
  108. {
  109.     emit NumClick(7);
  110. }
  111.  
  112. void WidgetCounter::on_Btn8_clicked()
  113. {
  114.     emit NumClick(8);
  115. }
  116.  
  117. void WidgetCounter::on_Btn9_clicked()
  118. {
  119.     emit NumClick(9);
  120. }
  121.  
  122. void WidgetCounter::on_Btn0_clicked()
  123. {
  124.     emit NumClick(0);
  125. }
  126.  
  127. /*���ܼ�����*/
  128. void WidgetCounter::on_BtnDev_clicked()
  129. {
  130.     op = '/';
  131.     f_num = true;
  132.     f_point = false;
  133.     times = 1;
  134. }
  135.  
  136. void WidgetCounter::on_BtnMul_clicked()
  137. {
  138.     op = '*';
  139.     f_num = true;
  140.     f_point = false;
  141.     times = 1;
  142. }
  143.  
  144. void WidgetCounter::on_BtnSub_clicked()
  145. {
  146.     op = '-';
  147.     f_num = true;
  148.     f_point = false;
  149.     times = 1;
  150. }
  151.  
  152. void WidgetCounter::on_BtnPlus_clicked()
  153. {
  154.     op = '+';
  155.     f_num = true;
  156.     f_point = false;
  157.     times = 1;
  158. }
  159.  
  160. /*��������*/
  161. void WidgetCounter::on_BtnEql_clicked()
  162. {
  163.     switch(op)
  164.     {
  165.     case '+':
  166.         num = num1 + num2;
  167.         break;
  168.     case '-':
  169.         num = num1 - num2;
  170.         break;
  171.     case '*':
  172.         num = num1 * num2;
  173.         break;
  174.     case '/':
  175.         num = num1 / num2;
  176.         break;
  177.     case 0:
  178.         num = num1;
  179.     }
  180.     ui->lEditPlay->setText(QString::number(num));
  181.     num1 = num;
  182.     num2 = 0;
  183.     op = 0;
  184.     times = 1;
  185. }
  186.  
  187. /*С���㰴��*/
  188. void WidgetCounter::on_BtnPoint_clicked()
  189. {
  190.     f_point = true;
  191. }
  192.  
  193. /*����������*/
  194. void WidgetCounter::on_BtnC_clicked()
  195. {
  196.     ui->lEditPlay->setText("0");
  197.     num1 = 0;
  198.     num2 = 0;
  199.     op = 0;
  200.     f_point = f_num = false;
  201.     times = 1;
  202. }
  203.  
  204. void WidgetCounter::on_BtnBack_clicked()
  205. {
  206.     if(!f_num)
  207.     {
  208.         ui->lEditPlay->backspace();
  209.         num1 = ui->lEditPlay->text().toDouble();
  210.         ui->lEditPlay->setText(QString::number(num1));
  211.     }
  212.     else
  213.     {
  214.         ui->lEditPlay->backspace();
  215.         num2 = ui->lEditPlay->text().toDouble();
  216.         ui->lEditPlay->setText(QString::number(num2));
  217.     }
  218. }
  219.  
  220. void WidgetCounter::on_BtnCE_clicked()
  221. {
  222.     if(f_num)
  223.     {
  224.         num2 = 0;    
  225.         ui->lEditPlay->setText(QString::number(num2));
  226.     }
  227.     else if(op != 0)
  228.         op = 0;
  229.     else
  230.     {
  231.         num1 = 0;
  232.         ui->lEditPlay->setText(QString::number(num1));
  233.     }
  234. }
  235.  

回复 "实现简单计算器"

这儿你可以回复上面这条便签

captcha