QT第四个程序 - 小学数学10以内加减多级计算训练程序

一、W004.h

cpp 复制代码
#ifndef W004_H
#define W004_H

#include <QWidget>
#include<QTimer>
#include<QDateTime>

class W004 : public QWidget
{
    Q_OBJECT

public:
    W004(QWidget *parent = nullptr);
    ~W004();
private:
    QDateTime StartTime;
    QTimer *TTT;
};
#endif // W004_H

二、W004.cpp

cpp 复制代码
#include<QDateTime>
#include<QDir>
#include<QFile>
#include "w004.h"
#include<QGuiApplication>
#include<QScreen>
#include <QRandomGenerator>
#include<QChar>
#include<QLabel>
#include<QLineEdit>
#include<qmath.h>
#include<QDebug>
#include<QComboBox>
#include<QPushButton>
#include<QGroupBox>
#include<QFont>
#include"Cacler.h"
#include<QList>
#include<QTimer>
W004::W004(QWidget *parent)
    : QWidget(parent)
{
    TTT = new QTimer(this);
    TTT->setInterval(1000);
    TTT->stop();
    QChar opList[]={'+','-'};
    setFixedSize(370,900);
    setWindowTitle("数学练习(0-10)加减法");
    QLabel * l1=new QLabel("题目量:",this);
    l1->resize(50,45);
    l1->move(10,0);
    l1->setAlignment(Qt::AlignVCenter);
    QComboBox *c1=new QComboBox(this);
    c1->resize(60,45);
    c1->move(70,0);
    c1->addItems({"5","10","15","20"});
    c1->setFont(QFont("黑体",12));
    QLabel * l2=new QLabel("运算量:",this);
    l2->resize(50,45);
    l2->move(140,0);
    l2->setAlignment(Qt::AlignVCenter);
    QComboBox *c2=new QComboBox(this);
    c2->resize(60,45);
    c2->move(210,0);
    c2->addItems({"1","2","3","4","5","6","7","8","9","10"});
    c2->setFont(QFont("黑体",12));
    QPushButton * btnsel=new QPushButton("生成",this);
    btnsel->resize(80,45);
    btnsel->move(280,0);
    btnsel->setFont(QFont("黑体",12));
    QGroupBox *grp =new QGroupBox("练习题",this);
    grp->resize(350,this->height()-10-40);
    grp->move(10,40);
    this->move(QGuiApplication::primaryScreen()->size().width()/2-this->width()/2,
               QGuiApplication::primaryScreen()->size().height()/2-this->height()/2);
    for (int var = 0; var < 20; var++) {
        QLabel * Tl=new QLabel("-",grp);
        Tl->resize(270,37);
        Tl->move(10,20+var*38);
        Tl->setProperty("qName","L"+QString::number(var));
        if(var%2==0)
            Tl->setStyleSheet("QLabel { border : 1px solid white; }");
        else
            Tl->setStyleSheet("QLabel { border : 1px solid gray; }");
        Tl->setFont(QFont("黑体",16));
        Tl->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
       // qDebug() << var << Tl->property("qName");
        QLineEdit *Tt=new QLineEdit("",grp);
        Tt->resize(50,37);
        Tt->move(290,20+var*38);
        Tt->setProperty("qName","T"+QString::number(var));
        Tt->setProperty("qResult","");
        Tt->setFont(QFont("黑体",15));
        //Tt->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        //Tt->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        Tt->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
       // qDebug() <<var<< Tt->property("qName");
    }
    QLabel * TR=new QLabel("0",grp);
    TR->resize(180,50);
    TR->setAlignment(Qt::AlignVCenter|Qt::AlignCenter);//
    TR->move(10,grp->height()-60);
    TR->setProperty("Name","Result");
    TR->setFont(QFont("黑体",12));
   // TR->setStyleSheet("QLabel { border : 1px solid dimgray; }");

    QLabel * TR1=new QLabel("0",grp);
    TR1->resize(50,50);
    TR1->setAlignment(Qt::AlignVCenter|Qt::AlignCenter);//
    TR1->move(190,grp->height()-60);
    TR1->setProperty("Name","Result");
    TR1->setFont(QFont("黑体",20));
    TR1->setStyleSheet("QLabel { color: blank; }");
    QPushButton * btnPing=new QPushButton("评分",grp);
    btnPing->resize(95,50);
    btnPing->setFont(QFont("黑体",18));
    btnPing->move(245,grp->height()-60);
    btnsel->setEnabled(true);
    btnPing->setEnabled(false);
    connect(btnsel,&QPushButton::clicked,this,[=](){
        const QObjectList& cls=grp->children();
        int rows=c1->currentText().toInt();
        int ops=c2->currentText().toInt();
        TR->setText("");
        TR1->setText("");
        TR1->setStyleSheet("QLabel { color: blank; }");
        Cacler cl;
        for(int i=0;i<20;i++)
        {
            if(i<rows)
            {
                QString tm;
                int b=QRandomGenerator::global()->bounded(0,1);
                int a=0;
                for(int j=0;j<ops;j++)
                {
                    a=QRandomGenerator::global()->bounded(0,10);
                    tm.append(QString::number(a));
                    tm.append(opList[b]);
                    b=QRandomGenerator::global()->bounded(0,1);
                }
                a=QRandomGenerator::global()->bounded(0,10);
                tm.append(QString::number(a));
                QString tr=cl.Cacle(tm);
                for(QObject *var : cls) {
                   // qDebug() << i << var->property("qName");
                    if(var->property("qName")==("L"+QString::number(i)))
                    {
                        QLabel * l1=  qobject_cast<QLabel*>(var);
                        l1->setText(tm+"=");
                    }
                    else if(var->property("qName")==("T"+QString::number(i)))
                    {
                      QLineEdit *t1=  qobject_cast<QLineEdit*>(var);
                      t1->setProperty("qResult",tr);
                      t1->setProperty("qQuest",tm);
                      t1->setStyleSheet("QLineEdit { color: black; }");
                      t1->setText("");
                    }
                }
            }
            else
            {
                for(QObject *var : cls) {
                   // qDebug() << i << var->property("Name");
                    if(var->property("Name")==("L"+QString::number(i)))
                    {
                        QLabel * l1=  qobject_cast<QLabel*>(var);
                        l1->setText("-");
                    }
                    else if(var->property("Name")==("T"+QString::number(i)))
                    {
                        QLineEdit *t1=  qobject_cast<QLineEdit*>(var);
                        t1->setProperty("Result","");
                    }
                }
            }
        }
        StartTime=QDateTime::currentDateTime();
        TTT->start();
        btnsel->setEnabled(false);
        btnPing->setEnabled(true);
        c1->setEnabled(false);
        c2->setEnabled(false);
    });
    connect(btnPing,&QPushButton::clicked,this,[=](){

        const QObjectList& cls=grp->children();
        int rows=c1->currentText().toInt();
        double onefen=100/rows;
        int rr=0;
        int nr=0;
        double sumfen=0;
        TTT->stop();
        QDateTime EndTime=QDateTime::currentDateTime();
        QString data;
        data.append(StartTime.toString("yyyy-MM-dd HH:mm:ss")+"至");
        data.append(EndTime.toString("yyyy-MM-dd HH:mm:ss")+"\r\n训练日志:\r\n");
        for(int i=0;i<20;i++)
        {
            for(QObject *var : cls) {
                if(var->property("qName")==("T"+QString::number(i)))
                {
                  qDebug() << i << var->property("qName");
                  QLineEdit *t1=  qobject_cast<QLineEdit*>(var);
                  QString r1=t1->property("qResult").toString();
                  QString r2=t1->text();
                  if(r1!="")
                  {
                      if(r1.toInt()==r2.toInt())
                      {
                          rr+=1;
                          sumfen+=onefen;
                          t1->setStyleSheet("QLineEdit { color: green; }");
                      }
                      else
                      {
                          nr+=1;
                          t1->setStyleSheet("QLineEdit { color: red; }");
                          data.append("错题:"+t1->property("qQuest").toString()+" = "+r1+" 填"+r2+"\r\n");
                      }
                  }
                }
            }
        }

        TR->setText("正确:"+QString::number(rr)+",错误:"+QString::number(nr)+"\n正确率:"+
                    QString::number(rr*100.0/(rr+nr))+"%,用时:"+QString::number(StartTime.secsTo(EndTime))+"秒");
        TR1->setText(QString::number(sumfen));
        data.append("训练结果:"+TR->text().toUtf8()+"\r\n总分:"+TR1->text().toUtf8()+"\r\n");
        if(sumfen>=80)
            TR1->setStyleSheet("QLabel { color: green; }");
        else
            TR1->setStyleSheet("QLabel { color: red; }");
        data.append("用时:"+QString::number(StartTime.secsTo(EndTime))+"秒");
        QFile f(QDir::currentPath()+"/Result.txt");
        f.open(QIODevice::Append);
        f.write(data.toUtf8());
        f.close();
        btnPing->setEnabled(false);
        btnsel->setEnabled(true);
        c1->setEnabled(true);
        c2->setEnabled(true);
    });

    connect(TTT,&QTimer::timeout,[=](){
        if(!btnsel->isEnabled())
        {
            TR1->setText(QString::number(StartTime.secsTo(QDateTime::currentDateTime())));
        }
    });
}

W004::~W004()
{
}

三、第三个程序计算模块,这不传了。

四、main.cpp

cpp 复制代码
#include "w004.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    W004 w;
    w.show();
    return a.exec();
}

五、软件截图

1、

2、

3、

4、

5、稍做变化:0-10加减乘除法

cpp 复制代码
QChar opList[]={'+','-','*','/'};//加入四则运算符变成四个
cpp 复制代码
QString tm;
                int b=QRandomGenerator::global()->bounded(0,4);//随机数也取在0-3
                int a=0;
                for(int j=0;j<ops;j++)
                {
                    a=QRandomGenerator::global()->bounded(0,10);
                    tm.append(QString::number(a));
                    tm.append(opList[b]);
                    b=QRandomGenerator::global()->bounded(0,4);//随机数也取在0-3
                }

6、效果图如下

7、坚持精益求精的态度。改进了显示效果和细节内容 :

相关推荐
2501_944525544 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
4 小时前
java关于内部类
java·开发语言
好好沉淀4 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
lsx2024064 小时前
FastAPI 交互式 API 文档
开发语言
VCR__5 小时前
python第三次作业
开发语言·python
码农水水5 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
wkd_0075 小时前
【Qt | QTableWidget】QTableWidget 类的详细解析与代码实践
开发语言·qt·qtablewidget·qt5.12.12·qt表格
东东5165 小时前
高校智能排课系统 (ssm+vue)
java·开发语言
余瑜鱼鱼鱼5 小时前
HashTable, HashMap, ConcurrentHashMap 之间的区别
java·开发语言
m0_736919105 小时前
模板编译期图算法
开发语言·c++·算法