Qt计算器的问题- c++
Issue with Qt Calculator - c++
我在Qt中创建了一个简单的计算器,但是我正试图添加一个按钮来做我的阶乘,但它不起作用有人能帮我一下吗?我已经实现了一个方法factorial
#include "mainwindow.h"
#include <QtCore/QCoreApplication>
QString value="",total="";
double fNum,sNum;
bool addBool=false, substractBool=false, multiplyBool=false, divideBool=false,Factorbool=false;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
label=new QLabel("0",this);
label->setGeometry(QRect(QPoint(75,25),QSize(50,200)));
clear_button=new QPushButton("C",this);
clear_button->setGeometry(QRect(QPoint(50,300),QSize(50,50)));
connect(clear_button,SIGNAL(released()),this,SLOT(clear()));
equals_button=new QPushButton("=",this);
equals_button->setGeometry(QRect(QPoint(100,300),QSize(50,50)));
connect(equals_button,SIGNAL(released()),this,SLOT(equals()));
add_button=new QPushButton("+",this);
add_button->setGeometry(QRect(QPoint(200,150),QSize(50,50)));
connect(add_button,SIGNAL(released()),this,SLOT(add()));
Factor_button =new QPushButton("n!",this);
Factor_button->setGeometry(QRect(QPoint(250,150),QSize(50,50)));
connect(Factor_button ,SIGNAL(released()),this,SLOT(add()));
substract_button=new QPushButton("-",this);
substract_button->setGeometry(QRect(QPoint(200,200),QSize(50,50)));
connect(substract_button,SIGNAL(released()),this,SLOT(substract()));
multiply_button=new QPushButton("X",this);
multiply_button->setGeometry(QRect(QPoint(200,250),QSize(50,50)));
connect(multiply_button,SIGNAL(released()),this,SLOT(multiply()));
divide_button=new QPushButton("/",this);
divide_button->setGeometry(QRect(QPoint(200,300),QSize(50,50)));
connect(divide_button,SIGNAL(released()),this,SLOT(divide()));
for(int i=0;i<10;i++){
QString digit=QString::number(i);
buttons[i]=new QPushButton(digit,this);
connect(buttons[i],SIGNAL(released()),this,SLOT(buttonPushed()));
}
setGeo();
}
void MainWindow::setGeo()
{
for(int i=0;i<1;i++)
{
buttons[i]->setGeometry(QRect(QPoint(50,300),QSize(50,50)));
}
for(int i=0;i<4;i++)
{
buttons[i]->setGeometry(QRect(QPoint(50*i,250),QSize(50,50)));
}
for(int i=4;i<7;i++)
{
buttons[i]->setGeometry(QRect(QPoint(50*(i-3),200),QSize(50,50)));
}
for(int i=7;i<10;i++)
{
buttons[i]->setGeometry(QRect(QPoint(50*(i-6),150),QSize(50,50)));
}
}
void MainWindow::buttonPushed()
{
QPushButton *button=(QPushButton *)sender();
emit numberEnitted(button->text()[0].digitValue());
value+=QString::number(button->text()[0].digitValue());
label->setText(value);
}
void MainWindow::clear(){
value="";
label->setText(value);
}
void MainWindow::add(){
fNum=value.toDouble();
value="";
label->setText(value);
addBool=true;
}
int factorial( int n)
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
void MainWindow::equals(){
sNum=value.toDouble();
if(addBool){
total=QString::number(fNum+sNum);
label->setText(total);
}
if(substractBool){
total=QString::number(fNum-sNum);
label->setText(total);
}
if(multiplyBool){
total=QString::number(fNum*sNum);
label->setText(total);
}
if(divideBool){
total=QString::number(fNum/sNum);
label->setText(total);
}
if(Factorbool)
{
total=QString::number(factorial(fNum));
label->setText(total);
}
}
void MainWindow::substract(){
fNum=value.toDouble();
value="";
label->setText(value);
substractBool=true;
}
void MainWindow::multiply(){
fNum=value.toDouble();
value="";
label->setText(value);
multiplyBool=true;
}
void MainWindow::divide(){
fNum=value.toDouble();
value="";
label->setText(value);
divideBool=true;
}
void MainWindow::Factor(){
fNum=value.toDouble();
value="";
label->setText(value);
Factorbool=true;
}
MainWindow::~MainWindow()
{
}
主要#include "mainwindow.h"
#include <QApplication>
#include <QDesktopWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.showMaximized();
w.setFixedSize(300,400);
w.move(QApplication::desktop()->screen()->rect().center()-w.rect().center());
w.show();
return a.exec();
}
. h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QLabel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
void numberEnitted(int number);
private slots:
void clear();
void add();
void equals();
void substract();
void multiply();
void divide();
void Factor();
void buttonPushed();
void setGeo();
private:
QLabel *label;
QPushButton *clear_button;
QPushButton *add_button;
QPushButton *equals_button;
QPushButton *substract_button;
QPushButton *multiply_button;
QPushButton *Factor_button;
QPushButton *divide_button;
QPushButton *zero_button;
QPushButton *buttons[10];
};
#endif
我在等待你的帮助:)
按下Factor_button
时发出的信号未连接到正确的槽位
connect(Factor_button, SIGNAL(released()), this, SLOT(add()));
应该 connect(Factor_button, SIGNAL(released()), this, SLOT(Factor()));
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题