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、坚持精益求精的态度。改进了显示效果和细节内容 :

相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript