基于Qt、C++的小学数学测试软件

本帖主要纪录在项目过程中遇到的问题以及解决方案,开源代码在帖子最后的GitHub链接里(记得标星星哦)。

将高像素图片压缩为背景图片的方法

在项目开始阶段,我在网上找到了一个高清的图片。

起始界面背景图

然而它的像素是5000*3000左右的,显然我们不能在Windows界面申请如此大的窗口,这里提供两种压缩图片及将其作为背景的方法。
首先将图片载入:

QPixmap pixmap;
pixmap.load("url");  //图片路径

这里提供两种方式:

饱和填充

QPixmap fitpixmap = pixmap.scaled(ui->label->width(), ui->label->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);  // 饱满填充

按比例填充

QPixmap fitpixmap = pixmap.scaled(ui->label->width(), ui->label->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);  // 按比例缩放

这里我们采用饱和填充,之后我们再申请画笔,将图片画出即可。

    QPainter painter(this);
    QPixmap pix=QPixmap(fitpixmap);
    painter.drawPixmap(0,0,pix);//使用画笔将图片画为背景。

完成后效果如下:
在这里插入图片描述这里加入了一些按钮和无边框处理。

事件过滤器的应用

后期需要在界面内完成对文本框数据的读取和界面内信息的改变(label内信息的改变),这时需要在Text Edit和label上应用事件过滤器。

tishi->installEventFilter(this);//类似这样

事件过滤器在函数

eventFilter(QObject *target,QEvent *event)

内部实现。
其具体为:

bool DivWindow::eventFilter(QObject *target,QEvent *event)
{
    if(target == this->daan)
    {
        if(event->type()==QEvent::KeyPress)
        {
            QKeyEvent *k=static_cast<QKeyEvent *>(event);
            if(k->key()==Qt::Key_Return||k->key()==Qt::Key_Enter)
            {
                QString tempdaan=daan->toPlainText();
                daan->clear();
                answer=tempdaan.toUInt();
                if(qAbs(answer-(double)number1/number2)<=0.1)
                {
                    flag++;
                    QMessageBox::information(this,"答案反馈","回答正确");
                    getRandomNumber();
                    QString labeltext;
                    labeltext="题目:"+QString::number(number1,10)+"➗"+QString::number(number2,10)+"=";
                    timu->setText(labeltext);
                }
                else
                {
                    QString labeltext;
                    labeltext="回答错误,正确答案为"+QString::number((double)number1/number2,10,2);
                    QMessageBox::information(this,"答案反馈",labeltext);
                    getRandomNumber();
                    labeltext="题目:"+QString::number(number1,10)+"➗"+QString::number(number2,10)+"=";
                    timu->setText(labeltext);
                }
                if(flag==11&&rank<3)
                {
                    QMessageBox::information(this,"提示","难度升级");
                    rank++;
                    flag=1;
                }
                QString information;
                information="难度等级:"+QString::number(rank,10)+" 累计回答正确题目个数:"+QString::number(flag-1,10);
                tishi->setText(information);
            }
        }
    }

    return QWidget::eventFilter(target,event);
}

其中涉及到的文本事件,鼠标事件就不在此赘述了。

成品效果

起始界面:
起始界面选择界面:
选择界面测试界面(这里只展示加法):
在这里插入图片描述在这里插入图片描述在这里插入图片描述总体功能如上。

最后附上本项目GitHub地址(记得标星星呀):链接: link.

猜你喜欢

转载自blog.csdn.net/jiagzhomeilang/article/details/107639413