• POJ代码提交器 QNetworkAccessManager post get


    这两天闲着蛋疼,写了个代码POJ代码提交器,如图

    代码记录下来吧,重在QNETWORKACCESSMANAGER的使用:

    #ifndef MYCODE_H
    #define MYCODE_H
    
    #include <QWidget>
    #include <QNetworkAccessManager>
    #include <QNetworkReply>
    #include<QNetworkRequest>
    #include<QUrl>
    #include<string>
    using std::string;
    
    
    namespace Ui {
        class MyCode;
    }
    
    class MyCode : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit MyCode(QWidget *parent = 0);
        ~MyCode();
    
    private:
        QNetworkAccessManager *manager;
        QNetworkReply *rep;
        Ui::MyCode *ui;
        char cur_lang();
        void init_set();
    
    public slots:
        void login();
        void post();
        void after_post(QNetworkReply*);
        void updateProgress(qint64,qint64);
    
        void deal_poj(QNetworkReply*);
        void deal_hdoj(QNetworkReply*);
        void deal_result(QNetworkReply*);
        void get_result();
    };
    
    #endif // MYCODE_H
    


     

    #include "mycode.h"
    #include "ui_mycode.h"
    #include<QFile>
    #include<QTextStream>
    #include<string>
    #include<QIcon>
    MyCode::MyCode(QWidget *parent) :
        QWidget(parent),manager(new QNetworkAccessManager(this)),
        ui(new Ui::MyCode)
    {
        ui->setupUi(this);
        init_set();
        connect(ui->loginPushButton,SIGNAL(clicked()),this,SLOT(login()));
        connect(ui->postButton,SIGNAL(clicked()),this,SLOT(post()));
        connect(ui->refreshButton,SIGNAL(clicked()),this,SLOT(get_result()));
    }
    
    MyCode::~MyCode()
    {
        delete ui;
    }
    
    void MyCode::login()
    {
        if(ui->judgeBox->currentText()==tr("POJ"))
        {
            connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(deal_poj(QNetworkReply*)));
            QString append=("user_id1="+ui->userEdit->text()+"&password1="+ui->passEdit->text()+"&B1=login&url=%2F");
            rep=manager->post(QNetworkRequest(QUrl("http://poj.org/login")),append.toAscii());
            connect(rep,SIGNAL(uploadProgress(qint64,qint64)),SLOT(updateProgress(qint64,qint64)));
        }
        else
        {
    
        }
    }
    
    void MyCode::init_set()
    {
        this->setFixedSize(this->width(),this->height());
        ui->userEdit->setFocus();
        ui->userEdit->setMaxLength(16);
        ui->probEdit->setText("2013");
        ui->passEdit->setEchoMode(QLineEdit::Password);
        ui->userEdit->setMaxLength(16);
        ui->progressBar->setFixedSize(this->width(),10);
        ui->progressBar->setValue(0);
        ui->userEdit->setText("627377770");
        ui->passEdit->setText("aaabbbccc");
        QIcon icon(":ioc.jpg");
        this->setWindowIcon(icon);
        //ui->progressBar->hide();
    }
    
    void MyCode::post()
    {
        if(ui->judgeBox->currentText()==tr("POJ"))
        {
            connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(after_post(QNetworkReply*)));
            QString append=("problem_id="+ui->probEdit->text()+"&language="+cur_lang()+"&source="+ui->codeEdit->toPlainText()+"&submit=Submit");
            rep=manager->post(QNetworkRequest(QUrl("http://poj.org/submit")),append.toAscii());
            connect(rep,SIGNAL(uploadProgress(qint64,qint64)),SLOT(updateProgress(qint64,qint64)));
        }
    }
    void MyCode::updateProgress(qint64 cur, qint64 total)
    {
        if(total!=0)
        ui->progressBar->setValue(cur/total*100);
    }
    
    void MyCode::deal_poj(QNetworkReply *reply)
    {
        updateProgress(0,100);
        if(reply->error()==QNetworkReply::NoError)
        {
            if(reply->error()==QNetworkReply::NoError)
            {
                ui->loginPushButton->setEnabled(false);
                ui->userEdit->setEnabled(false);
                ui->passEdit->setEnabled(false);
            }
            reply->deleteLater();
            disconnect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(deal_poj(QNetworkReply*)));
        }
        else return;
    }
    //G++ GCC  JAVA PASCAL C++ C FORTRAN
    void MyCode::deal_hdoj(QNetworkReply *reply)
    {
        reply->deleteLater();
    }
    
    char MyCode::cur_lang()
    {
        if(ui->judgeBox->currentText()=="POJ")
        {
            if(ui->langBox->currentText()=="G++")
                return '0';
            else if(ui->langBox->currentText()=="GCC")
                return '1';
            else if(ui->langBox->currentText()=="Java")
                return '2';
            else if(ui->langBox->currentText()=="Pascal")
                return '3';
            else if(ui->langBox->currentText()=="C++")
                return '4';
            else if(ui->langBox->currentText()=="C")
                return '5';
            else if(ui->langBox->currentText()=="Fortran")
                return '6';
        }
        else if(ui->judgeBox->currentText()=="HDOJ")
        {
    
        }
    
    }
    
    void MyCode::after_post(QNetworkReply *reply)
    {
        updateProgress(0,100);
        if(reply->error()==QNetworkReply::NoError)
        {
            disconnect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(after_post(QNetworkReply*)));
            get_result();
        }
    
    }
    
    void MyCode::get_result()
    {
    
        if(ui->judgeBox->currentText()=="POJ")
        {
            connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(deal_result(QNetworkReply*)));
            rep=manager->get(QNetworkRequest(QUrl("http://poj.org/status")));
            connect(rep,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateProgress(qint64,qint64)));
        }
        else
        {
        }
    }
    
    void MyCode::deal_result(QNetworkReply *reply)
    {
    //    QByteArray arr=reply->readAll();
    //    QString string=QString::fromUtf8(arr);
    //    ui->codeEdit->setText(arr);
        updateProgress(0,100);
        if(reply->error()==QNetworkReply::NoError)
        {
            if(ui->judgeBox->currentText()=="POJ")
            {
                QByteArray arr=reply->readAll();
                QString data=QString::fromUtf8(arr);
                data.replace(' ','.');
                data.replace('\n','.');
                QFile file("/home/Focuson/Desktop/temp.txt");
                file.open(QIODevice::WriteOnly | QIODevice::Text);
                QTextStream out(&file);
                out<<data;
                file.close();
                int index=data.toStdString().find(ui->userEdit->text().toStdString());
                index=data.toStdString().find(ui->userEdit->text().toStdString(),index+1);
                index=data.toStdString().find(ui->userEdit->text().toStdString(),index+1);
                index=data.toStdString().find(ui->userEdit->text().toStdString(),index+1);
                char result[9][30]={"Accepted",
                               "Presentation.Error",
                               "Time.Limit.Exceeded",
                               "Memory.Limit.Exceeded",
                               "Wrong.Answer",
                               "Runtime.Error",
                               "Output.Limit.Exceeded",
                                    "Compile.Error",
                                    "Compiling"};
                int t[9]={INT_MAX,INT_MAX,INT_MAX,INT_MAX,INT_MAX,INT_MAX,INT_MAX,INT_MAX,INT_MAX};
                for(int i=0;i<9;i++)
                {
                    int a=data.toStdString().find(result[i],index);
                    if((size_t)a!=std::string::npos)
                    {
                        t[i]=a;
                    }
                }
                int res=0,min=t[0];
                for(int i=0;i<9;i++)
                {
                    if(min>t[i])min=t[i],res=i;
                }
    
                //QString(result[res]).replace('.',' ').toStdString().c_str();
                ui->statuLabel->setText(QString(result[res]).replace('.',' ').toStdString().c_str());
                disconnect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(deal_result(QNetworkReply*)));
            }
        }
        reply->deleteLater();
    }
    


     

  • 相关阅读:
    bash中常见环境变量env、set、export 、declare与bash漏洞原理
    Java-获取时间方法比较
    Java-数据类型转换大全
    Java-后端图片处理(图片拼接)
    Java-AOP切面
    Java-异常状态码
    Spring Data JPA-日常使用
    Http-请求头各种参数设置
    Java-java命令运行jar编译问题
    SpringBoot-文件上传
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3001489.html
Copyright © 2020-2023  润新知