SophomoreWin

update
上级 ef1c04da
# This file is used to ignore files which are generated
# ----------------------------------------------------------------------------
*~
*.autosave
*.a
*.core
*.moc
*.o
*.obj
*.orig
*.rej
*.so
*.so.*
*_pch.h.cpp
*_resource.rc
*.qm
.#*
*.*#
core
!core/
tags
.DS_Store
.directory
*.debug
Makefile*
*.prl
*.app
moc_*.cpp
ui_*.h
qrc_*.cpp
Thumbs.db
*.res
*.rc
/.qmake.cache
/.qmake.stash
# qtcreator generated files
*.pro.user*
# xemacs temporary files
*.flc
# Vim temporary files
.*.swp
# Visual Studio generated files
*.ib_pdb_index
*.idb
*.ilk
*.pdb
*.sln
*.suo
*.vcproj
*vcproj.*.*.user
*.ncb
*.sdf
*.opensdf
*.vcxproj
*vcxproj.*
# MinGW generated files
*.Debug
*.Release
# Python byte code
*.pyc
# Binaries
# --------
*.dll
*.exe
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp \
math_impl.cpp \
sophomore_widget.cpp
HEADERS += \
mainwindow.h \
math_impl.h \
sophomore_widget.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
#include "mainwindow.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置中文编码
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
#if _MSC_VER
QTextCodec *codec = QTextCodec::codecForName("GBK");
#else
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
#endif
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
#else
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
#endif
MainWindow w;
w.show();
return a.exec();
}
#include "mainwindow.h"
#include <QDebug>
#include <QString>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
sp_widget = new SophomoreWidget(this);
setCentralWidget(sp_widget);
}
MainWindow::~MainWindow()
{
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "sophomore_widget.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
SophomoreWidget *sp_widget;
};
#endif // MAINWINDOW_H
#include "math_impl.h"
#include <QString>
MathImpl::MathImpl(QObject *parent) : QObject(parent)
{
}
int MathImpl::generateRandomNumber(int min, int max)
{
if(min == max && min ==0){
return 0;
}
return (rand() % (max - min)) + min +1;
}
int MathImpl::doCount(int num1, int num2, QString op)
{
if(op == "+"){
return num1+num2;
}else if("-" == op){
return num1-num2;
}else if("*" == op){
return num1*num2;
}
return 0;
}
// 先乘后加减 a*b+c
const QString MathImpl::fun1()
{
int num1 = generateRandomNumber(2, 7);
int num2 = generateRandomNumber(2, 7);
int num3 = generateRandomNumber(10, 50);
QString tmp = QString::number(num1) + " * " + QString::number(num2) + " + "+ QString::number(num3)+" = ";
return tmp;
}
// 先乘后加减 a*b-c
const QString MathImpl::fun2()
{
QString tmp ;
int num1 ,num2,num3;
do{
num1 = generateRandomNumber(2, 7);
num2 = generateRandomNumber(2, 7);
num3 = generateRandomNumber(10, 100);
}while(num1 * num2 < num3);
tmp = QString::number(num1) + " * " + QString::number(num2) + " - "+ QString::number(num3)+ " = ";
return tmp;
}
// 先乘后加减 a/b+c
const QString MathImpl::fun3()
{
QString tmp ;
int num1 ,num2,num3;
num1 = generateRandomNumber(2, 6);
num2 = generateRandomNumber(2, 6);
num3 = generateRandomNumber(10, 50);
tmp = QString::number(num1*num2) + " ÷ " + QString::number(num2) + " + "+ QString::number(num3)+ " = ";
return tmp;
}
// 先除后减 a÷b-c
const QString MathImpl::fun4()
{
QString tmp ;
int num1 ,num2,num3;
do{
num1 = generateRandomNumber(2, 6);
num2 = generateRandomNumber(2, 6);
num3 = generateRandomNumber(2, 6);
}while(num1 < num3);
tmp = QString::number(num1*num2) + " ÷ " + QString::number(num2) + " - "+ QString::number(num3)+ " = ";
return tmp;
}
#ifndef MATH_H
#define MATH_H
#include <QObject>
class MathImpl : public QObject
{
Q_OBJECT
public:
explicit MathImpl(QObject *parent = nullptr);
int generateRandomNumber(int min,int max);
// 先乘后加 a*b+c
const QString fun1();
// 先乘后减 a*b-c
const QString fun2();
// 先除后加 a*b+c
const QString fun3();
// 先除后减 a*b-c
const QString fun4();
private:
int doCount(int num1,int num2,QString op);
signals:
};
#endif // MATH_H
# pragma execution_character_set("utf-8")
#include "sophomore_widget.h"
#include <QCheckBox>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QtDebug>
#include <QLabel>
#include <QSpinBox>
#include <QLineEdit>
#include <QFile>
#include <QTextStream>
SophomoreWidget::SophomoreWidget(QWidget *parent)
: QWidget(parent)
, m (new MathImpl(this))
, m_checkboxFun1(new QCheckBox())
, m_checkboxFun2(new QCheckBox())
, m_checkboxFun3(new QCheckBox())
, m_checkboxFun4(new QCheckBox())
, m_layoutNum(new QHBoxLayout)
, m_layoutMain(new QVBoxLayout)
, m_btn(new QPushButton("生成题目",this))
, m_labNum(new QLabel("题目数量:"))
, m_SpinBoxNum(new QSpinBox)
{
initUI();
initConnect();
}
void SophomoreWidget::slotClickBtn()
{
functionPointers.clear();
if(m_checkboxFun1->isChecked()){
functionPointers.push_back(&MathImpl::fun1);
}
if(m_checkboxFun2->isChecked()){
functionPointers.push_back(&MathImpl::fun2);
}
if(m_checkboxFun3->isChecked()){
functionPointers.push_back(&MathImpl::fun3);
}
if(m_checkboxFun4->isChecked()){
functionPointers.push_back(&MathImpl::fun4);
}
for (int i = 0 ; i< 700; i++) {
int r = m->generateRandomNumber(0,static_cast<int>(functionPointers.size()-1) );
QString result = (m->*(functionPointers[r]))();
qWarning()<< result;
}
}
void SophomoreWidget::initUI()
{
m_checkboxFun1->setText(tr("题型:a*b+c"));
m_checkboxFun1->setChecked(true);
m_checkboxFun2->setText("题型:a*b-c");
m_checkboxFun2->setChecked(true);
m_checkboxFun3->setText("题型:a*b+c");
m_checkboxFun3->setChecked(true);
m_checkboxFun4->setText("题型:a*b-c");
m_checkboxFun4->setChecked(true);
m_SpinBoxNum->setMaximum(1000);
m_SpinBoxNum->setValue(100);
m_layoutNum->addWidget(m_labNum);
m_layoutNum->addWidget(m_SpinBoxNum);
m_layoutMain->addLayout(m_layoutNum);
m_layoutMain->addWidget(m_btn);
m_layoutMain->addWidget(m_checkboxFun1);
m_layoutMain->addWidget(m_checkboxFun2);
m_layoutMain->addWidget(m_checkboxFun3);
m_layoutMain->addWidget(m_checkboxFun4);
setLayout(m_layoutMain);
}
void SophomoreWidget::initConnect()
{
connect(m_btn,&QPushButton::clicked,this,&SophomoreWidget::slotClickBtn);
}
void SophomoreWidget::saveFile(QString fileName)
{
}
#ifndef SOPHOMORE_WIDGET_H
#define SOPHOMORE_WIDGET_H
#include <QWidget>
#include "math_impl.h"
class QCheckBox;
class QPushButton;
class QVBoxLayout;
class QHBoxLayout;
class QSpinBox;
class QLabel;
class QLineEdit;
typedef const QString (MathImpl::*ClassFunction)();
class SophomoreWidget : public QWidget
{
Q_OBJECT
public:
explicit SophomoreWidget(QWidget *parent = nullptr);
signals:
public slots:
void slotClickBtn();
private:
void initUI();
void initConnect();
void saveFile(QString fileName);
MathImpl *m;
std::vector<ClassFunction> functionPointers;
QCheckBox *m_checkboxFun1;
QCheckBox *m_checkboxFun2;
QCheckBox *m_checkboxFun3;
QCheckBox *m_checkboxFun4;
QHBoxLayout *m_layoutNum;
QVBoxLayout *m_layoutMain;
QPushButton *m_btn;
// 选择保存文件路径的按钮
QPushButton *m_btnSavevFile;
// 显示文件路径
QLineEdit* m_edtSaveFileName;
QLabel* m_labNum;
QSpinBox* m_SpinBoxNum;
};
#endif // SOPHOMORE_WIDGET_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册