vs集成qt实现简单的计算器

该博客介绍了如何在Visual Studio环境下结合QT库,实现一个基础的计算器应用。虽然可能未涵盖所有计算情况,但已能完成基本运算。源代码包括Calculator头文件和实现文件,以及calculation模块的相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可能没有考虑到所有情况,但基本的计算可以做到!

Calculator.h

#pragma once

#include <QtWidgets/QDialog>
#include "ui_Calculator.h"
#include "calculation.h"
#include <QPushButton>
#include <QLineEdit>
#include <QPlainTextEdit>
#include <cmath>

const int TOTALNUM = 10; // 数字键总数
const int OPERATORNUM = 6; // 操作符总数
const int WIDTH = 300; // 默认窗口宽度
const int HEIGHT = 450; // 默认窗口高度
const int ZOOMINWIDTH = 600; // 显示历史记录栏时的窗口宽度

const int BUTTONWIDTH = 60; // 按钮的宽度
const int BUTTONHEIGHT = 40; // 按钮的高度

const int SMALLBUTTONWIDTH = 30; // 小图标的宽度
const int SMALLBUTTONHEIGHT = 30; // 小图标的高度

class Calculator : public QDialog
{
	Q_OBJECT

public:
	Calculator(QWidget *parent = Q_NULLPTR);

private:
	Ui::CalculatorClass ui;

private:
	calculation c;

	QPushButton *histotyButton;

	QPushButton *numButton[TOTALNUM];
	QPushButton *operatorButton[OPERATORNUM];
	QPushButton *pointButton;
	QPushButton *leftParenthesesButton;
	QPushButton *rightParenthesesButton;
	QPushButton *sinButton;
	QPushButton *cosButton;
	QPushButton *tanButton;
	QPushButton *sqrtButton;
	QPushButton *squareButton;
	QPushButton *logButton;
	QPushButton *expButton;
	QPushButton *none1;
	QPushButton *none2;
	QPushButton *miciButton;
	QPushButton *tenMiciButton;
	QPushButton *factorialButton;
	QPushButton *positiveAndNegativeButton;
	QPushButton *piButton;
	QPushButton *clearButton;
	QPushButton *backspaceButton;

	QLineEdit *expressionLineEdit;
	QPlainTextEdit *historyResultTextEdit;

private:
	void initButton();
	void setButton(QPushButton * button, const QString & filePath, const int & width, const int & height, const int & buttonWidth = BUTTONWIDTH, const int & buttonHeight = BUTTONHEIGHT);

	void initLineEdit();
	char* getLastNum();

private slots:
	void onNumButtonClicked(const qreal & num);
	void onOperatorButtonClicked(const char & operatorName);
	void backspaceButtonClicked();
	void clearButtonClicked();
	void triFunButtonClicked(const QString & tri);
	void squareButtonClicked();
	void sqrtButtonClicked();
	void powButtonClicked();
	void tenPowButtonClicked();
	void positiveAndNegativeButtonClicked();
	void eFunButtonClicked(const QString & e);
	void histotyButtonClicked();
};

Calculaor.cpp

#include "Calculator.h"

bool zoomin = false; // 是否放大(显示历史栏)

const char OPERATOR[] = "%/*-+=";

Calculator::Calculator(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);
	// 初始化
	initButton();
	initLineEdit();
}

// 简单计算阶乘
double factorial(int n) {
	double res = 1;
	while (n > 0) {
		res *= n;
		n--;
	}
	return res;
}

void Calculator::initButton()
{
	setMinimumSize(WIDTH, HEIGHT);
	setMaximumSize(WIDTH, HEIGHT);

	QString iconPath;
	int j = 1;
	int i;
	// 初始化数字按钮
	for (i = 0; i < TOTALNUM; ++i) {
		numButton[i] = new QPushButton(this);
		iconPath = "./img/num" + QString::number(i) + ".png";
		if (i == 0) {
			setButton(numButton[i], iconPath, (WIDTH - BUTTONWIDTH) >> 1, HEIGHT - BUTTONHEIGHT);
		}
		else {
			if (i % 3 == 1) {
				j++;
			}
			setButton(numButton[i], iconPath, BUTTONWIDTH * ((i - 1) % 3 + 1), HEIGHT - j * BUTTONHEIGHT);
		}
		// 通过lamda表达式进行传参
		connect(numButton[i], &QPushButton::clicked, this, [=] {onNumButtonClicked(i); });
	}

	// 初始化加 减 乘 除 取余 等于
	for (i = 0; i < OPERATORNUM; ++i) {
		operatorButton[i] = new QPushButton(this);
		iconPath = "./img/operator" + QString::number(i + 1) + ".png";
		setButton(operatorButton[i], iconPath, WIDTH - BUTTONWIDTH, HEIGHT - BUTTONHEIGHT * (OPERATORNUM - i));
		connect(operatorButton[i], &QPushButton::clicked, this, [=] {onOperatorButtonClicked(OPERATOR[i]); });
	}

	// 初始化小数点按钮
	pointButton = new QPushButton(this);
	setButton(pointButton, "./img/point.png", WIDTH - BUTTONWIDTH * 2, HEIGHT - BUTTONHEIGHT);
	connect(pointButton, &QPushButton::clicked, this, [=] {onOperatorButtonClicked('.'); });

	// 初始化左括号按钮
	leftParenthesesButton = new QPushButton(this);
	setButton(leftParenthesesButton, "./img/leftParentheses.png", 0, HEIGHT - BUTTONHEIGHT);
	connect(leftParenthesesButton, &QPushButton::clicked, this, [=] {onOperatorButtonClicked('('); });


	// 初始化右括号按钮
	rightParenthesesButton = new QPushButton(this);
	setButton(rightParenthesesButton, "./im
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值