感谢大大的提点 昨天晚上已经把整个程式都做完了 绝大的主程式都是靠copy的 不过好歹也把他程式要表达的功能搞懂了(虽然里面的语法还是没有完全看懂) 不过复制贴上可能会导致里面有一些多余的函式在内 不过我也看不太懂所以就不删了 不影响功能就好.....
这次就实在是靠copy+自己理解修改+一些添加物(进制转换算是完全经我自己写的,不过没打算让他可以运算 只是单纯的互转而已)
计算机标准型+简单进制转换功能 cal2.rar (11 K) 下载次数:1 下面是代码区
头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QKeyEvent>
#include <QString>
#include <QLabel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
void on_pushButton_9_clicked();
void on_pushButton_10_clicked();
void on_pushButton_12_clicked();
void on_pushButton_13_clicked();
void on_pushButton_14_clicked();
void on_pushButton_15_clicked();
void on_pushButton_11_clicked();
void on_pushButton_19_clicked();
void on_pushButton_16_clicked();
void on_pushButton_18_clicked();
void on_pushButton_25_clicked();
void on_pushButton_20_clicked();
void on_pushButton_26_clicked();
void on_pushButton_21_clicked();
void on_pushButton_22_clicked();
void on_pushButton_23_clicked();
void on_pushButton_24_clicked();
void on_pushButton_17_clicked();
void on_radioButton_clicked();
void on_radioButton_2_clicked();
void on_radioButton_3_clicked();
private:
Ui::MainWindow *ui;
bool waitingForOperand;
double sumInMemory;
double sumSoFar;
double factorSoFar;
QString pendingAdditiveOperator;
QString pendingMultiplicativeOperator;
void abortOperation();
bool calculate(double rightOperand, const QString &pendingOperator);
void change(int i,int b);
};
#endif // MAINWINDOW_H
----------------------------------------------------------------------------
----------------------------------------------------------------------------
主文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Qstring>
#include <QMessageBox>
#include <QDebug>
#include <QLineEdit>
int i=1;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setText("0");
sumInMemory = 0.0;
sumSoFar = 0.0;
factorSoFar = 0.0;
waitingForOperand = true;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()//0
{
int Value = ui->pushButton->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_2_clicked()//1
{
int Value = ui->pushButton_2->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_3_clicked()//2
{
int Value = ui->pushButton_3->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_4_clicked()//3
{
int Value = ui->pushButton_4->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_5_clicked()//4
{
int Value = ui->pushButton_5->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_6_clicked()//5
{
int Value = ui->pushButton_6->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_7_clicked()//6
{
int Value = ui->pushButton_7->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_8_clicked()//7
{
int Value = ui->pushButton_8->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_9_clicked()//8
{
int Value = ui->pushButton_9->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_10_clicked()//9
{
int Value = ui->pushButton_10->text().toInt();
if (ui->lineEdit->text() == "0" && Value == 0.0)
return;
if (waitingForOperand) {
ui->lineEdit->clear();
waitingForOperand = false;
}
ui->lineEdit->setText(ui->lineEdit->text() + QString::number(Value));
}
void MainWindow::on_pushButton_20_clicked()//.
{
if (waitingForOperand)
ui->lineEdit->setText("0");
if (!ui->lineEdit->text().contains('.'))
ui->lineEdit->setText(ui->lineEdit->text() + tr("."));
waitingForOperand = false;
}
void MainWindow::on_pushButton_12_clicked()//+
{
QString clickedOperator = ui->pushButton_12->text();
double operand = ui->lineEdit->text().toDouble();
if (!pendingMultiplicativeOperator.isEmpty()) {
if (!calculate(operand, pendingMultiplicativeOperator)) {
abortOperation();
return;
}
ui->lineEdit->setText(QString::number(factorSoFar));
operand = factorSoFar;
factorSoFar = 0.0;
pendingMultiplicativeOperator.clear();
}
if (!pendingAdditiveOperator.isEmpty()) {
if (!calculate(operand, pendingAdditiveOperator)) {
abortOperation();
return;
}
ui->lineEdit->setText(QString::number(sumSoFar));
} else {
sumSoFar = operand;
}
pendingAdditiveOperator = clickedOperator;
waitingForOperand = true;
}
void MainWindow::on_pushButton_13_clicked()//-
{
QString clickedOperator = ui->pushButton_13->text();
double operand = ui->lineEdit->text().toDouble();
if (!pendingMultiplicativeOperator.isEmpty()) {
if (!calculate(operand, pendingMultiplicativeOperator)) {
abortOperation();
return;
}
ui->lineEdit->setText(QString::number(factorSoFar));
operand = factorSoFar;
factorSoFar = 0.0;
pendingMultiplicativeOperator.clear();
}
if (!pendingAdditiveOperator.isEmpty()) {
if (!calculate(operand, pendingAdditiveOperator)) {
abortOperation();
return;
}
ui->lineEdit->setText(QString::number(sumSoFar));
} else {
sumSoFar = operand;
}
pendingAdditiveOperator = clickedOperator;
waitingForOperand = true;
}
void MainWindow::on_pushButton_14_clicked()//*
{
QString clickedOperator = ui->pushButton_14->text();
double operand = ui->lineEdit->text().toDouble();
if (!pendingMultiplicativeOperator.isEmpty()) {
if (!calculate(operand, pendingMultiplicativeOperator)) {
abortOperation();
return;
}
ui->lineEdit->setText(QString::number(factorSoFar));
} else {
factorSoFar = operand;
}
pendingMultiplicativeOperator = clickedOperator;
waitingForOperand = true;
}
void MainWindow::on_pushButton_15_clicked()// /
{
QString clickedOperator = ui->pushButton_15->text();
double operand = ui->lineEdit->text().toDouble();
if (!pendingMultiplicativeOperator.isEmpty()) {
if (!calculate(operand, pendingMultiplicativeOperator)) {
abortOperation();
return;
}
ui->lineEdit->setText(QString::number(factorSoFar));
} else {
factorSoFar = operand;
}
pendingMultiplicativeOperator = clickedOperator;
waitingForOperand = true;
}
void MainWindow::on_pushButton_11_clicked()//=
{
double operand = ui->lineEdit->text().toDouble();
if (!pendingMultiplicativeOperator.isEmpty()) {
if (!calculate(operand, pendingMultiplicativeOperator)) {
abortOperation();
return;
}
operand = factorSoFar;
factorSoFar = 0.0;
pendingMultiplicativeOperator.clear();
}
if (!pendingAdditiveOperator.isEmpty()) {
if (!calculate(operand, pendingAdditiveOperator)) {
abortOperation();
return;
}
pendingAdditiveOperator.clear();
} else {
sumSoFar = operand;
}
ui->lineEdit->setText(QString::number(sumSoFar));
sumSoFar = 0.0;
waitingForOperand = true;
}
void MainWindow::on_pushButton_19_clicked()//C
{
sumInMemory = 0.0;
sumSoFar = 0.0;
factorSoFar = 0.0;
waitingForOperand = true;
ui->lineEdit->setText(QString::number(0));
}
void MainWindow::on_pushButton_16_clicked()//sqrt
{
QString clickedOperator = ui->pushButton_16->text();
double operand = ui->lineEdit->text().toDouble();
double result = 0.0;
if (operand < 0.0) {
abortOperation();
return;
}
result = std::sqrt(operand);
ui->lineEdit->setText(QString::number(result));
waitingForOperand = true;
}
void MainWindow::on_pushButton_17_clicked()//X^2
{
QString clickedOperator = ui->pushButton_16->text();
double operand = ui->lineEdit->text().toDouble();
double result = 0.0;
result = std::pow(operand, 2.0);
ui->lineEdit->setText(QString::number(result));
waitingForOperand = true;
}
void MainWindow::on_pushButton_18_clicked()//1/X
{
QString clickedOperator = ui->pushButton_16->text();
double operand = ui->lineEdit->text().toDouble();
double result = 0.0;
if (operand == 0.0) {
abortOperation();
return;
}
result = 1.0 / operand;
ui->lineEdit->setText(QString::number(result));
waitingForOperand = true;
}
void MainWindow::on_pushButton_25_clicked()
{
if (waitingForOperand)
return;
QString str = ui->lineEdit->text();
str.chop(1);
if (str.isEmpty()) {
str = "0";
}
ui->lineEdit->setText(str);
}
bool MainWindow::calculate(double rightOperand, const QString &pendingOperator)//計算式
{
if (pendingOperator == tr("+")) {
sumSoFar += rightOperand;
} else if (pendingOperator == tr("-")) {
sumSoFar -= rightOperand;
} else if (pendingOperator == tr("*")) {
factorSoFar *= rightOperand;
} else if (pendingOperator == tr("/")) {
if (rightOperand == 0.0)
return false;
factorSoFar /= rightOperand;
}
return true;
}
void MainWindow::on_pushButton_26_clicked()//+-
{
QString text = ui->lineEdit->text();
double value = text.toDouble();
if (value > 0.0) {
text.prepend(tr("-"));
} else if (value < 0.0) {
text.remove(0, 1);
}
ui->lineEdit->setText(text);
}
void MainWindow::on_pushButton_21_clicked()//MC
{
sumInMemory = 0.0;
}
void MainWindow::on_pushButton_22_clicked()
{
ui->lineEdit->setText(QString::number(sumInMemory));//MR
waitingForOperand = true;
}
void MainWindow::on_pushButton_23_clicked()//MS
{
on_pushButton_14_clicked();
sumInMemory = ui->lineEdit->text().toDouble();
}
void MainWindow::on_pushButton_24_clicked()//M+
{
on_pushButton_14_clicked();
sumInMemory += ui->lineEdit->text().toDouble();
}
void MainWindow::abortOperation()
{
sumInMemory = 0.0;
sumSoFar = 0.0;
factorSoFar = 0.0;
waitingForOperand = true;
ui->lineEdit->setText(tr("####"));
}
void MainWindow::on_radioButton_clicked()//2進制
{
if(i==2){//如果原始進制為2
return;//不回傳值
}
if(i==1 || i==3){//如果原始進制為10.16進制
int b=i;//原始進制給b
change(2,b);//呼叫程式 b轉2進制
}
i=2; //原始進制改2進制
}
void MainWindow::on_radioButton_2_clicked()//10進制
{
if(i==1){
return;
}
if(i==2 || i==3){
int b=i;
change(1,b);
}
i=1;
}
void MainWindow::on_radioButton_3_clicked()//16進制
{
if(i==3){
return;
}
if(i==1 || i==2){
int b=i;
change(3,b);
}
i=3;
}
void MainWindow::change(int i,int b){
int n;//2進制
int a;//16進制
bool ok;
QString str;
str=ui->lineEdit->text();//儲存當前值的str字串
n=ui->lineEdit->text().toInt();//儲存當前值的10進制狀態
if(b!=1){//如果原始進制不為10進制 全都轉回10進制
n=str.toInt(&ok,2); //2進轉回10進
a=str.toInt(&ok,16);//16進制轉回10進
}
switch (i) {//進制互轉
case 1://轉為10進制
if (b==1){//如果原始進制為10進制
return; //傳回原值
}
if (b==2){//如果原始進制為2進制
str.setNum(n,10);//回傳n值
}
if(b==3){//如果原始進制為16進制
str=QString::number(a); //回傳a值
}
break;
case 2://轉為2進制
if (b==1){//如果原始進制為10進制
str.setNum(n,2);//轉為2進制
}
if (b==2){//如果原始進制為2進制
return;//不回傳值
}
if(b==3){//如果原始進制為16進制
str.setNum(a,16); //轉為2進制
}
break;
case 3://轉為16進制
if (b==1){//如果原始進制為10進制
str.setNum(n,16);//轉為16進制
}
if (b==2){//如果原始進制為2進制
str.setNum(n,16);//轉為16進制
}
if(b==3){//如果原始進制為16進制
return; //不回傳值
}
break;
}
ui->lineEdit->setText(str);
}