基于qt5的移动话费详单读取分析程序开发记录

来源:互联网 发布:js跨域清除cookie 编辑:程序博客网 时间:2024/04/28 11:45


2014/6/4

总体思路:利用qtnetwork中的函数实现post登陆,然后下载话费详单到本地,再进行分析

遇到的问题

1、移动登陆时需要输入验证码

暂时的思路:将验证码下载到本地然后再打开显示在界面上

//代码段1:将验证码文件读取并显示    QString filename = "D:/test.jpg";        if(filename.isEmpty())        {             return;         }        else        {            QImage* img=new QImage;            if(! ( img->load(filename) ) ) //加载图像            {                QMessageBox::information(this,                                         tr("打开图像失败"),                                         tr("打开图像失败!"));                delete img;                return;            }            ui->label1->setPixmap(QPixmap::fromImage(*img));        }

接下来考虑如何下载图片

想法是用QNetworkAccessManager读取之后直接用QFile保存即可,不过用QFile之后会出现乱码

参考了http://www.oschina.net/code/snippet_583625_19562博文之后知道了应该用qpixmap来保存图片文件

移动验证码地址:https://sn.ac.10086.cn/servlet/CreateImage?num     其中num可取1-11(应该还有别的值,不过好像随便取哪个值都能实现获得验证码)

知道这些之后就能编写下载图片函数了,结合代码段1就能实现读取并显示验证码了,完整代码如下:

void MainWindow::loadimage(QNetworkReply* reply){    //下面三行实现下载验证码    currentPicture = new QPixmap;    currentPicture->loadFromData(reply->readAll());    currentPicture->save(PICPATH);//PICPATH为宏定义的保存路径    //读取验证码文件并显示    QString filename = PICPATH;        if(filename.isEmpty())        {             return;        }        else        {            QImage* img=new QImage;            if(! ( img->load(filename) ) ) //加载图像            {                QMessageBox::information(this,                                         tr("打开图像失败"),                                         tr("打开图像失败!"));                delete img;                return;            }            //label的text设置为loading            ui->label->setPixmap(QPixmap::fromImage(*img));        }}

//构造类中创建了QNetworkAccessManager实例,并关联信号槽MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    picmanager = new QNetworkAccessManager(this);//下载图片的manager    connect(picmanager,SIGNAL(finished(QNetworkReply*)),//下载验证码            this,SLOT(loadimage(QNetworkReply*)));    //访问移动验证码地址    picmanager->get(QNetworkRequest(QUrl("https://sn.ac.10086.cn/servlet/CreateImage?2")));}

//mainwindow.h#include <QMainWindow>#include <QtNetwork/QNetworkRequest>#include <QtNetwork/QNetworkReply>#include <QtNetwork/QNetworkAccessManager>#include <QString>#include <QMessageBox>#include <QFile>#include <QDebug>#include <QPixmap>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();    QFile *file;    QPixmap *currentPicture;private:    Ui::MainWindow *ui;    QNetworkAccessManager *manager;    QNetworkAccessManager *picmanager;private slots:    void replyFinished(QNetworkReply *);    void loadimage(QNetworkReply* );};#endif // MAINWINDOW_H

至此,验证码问题完美解决,下一步准备用post实现登陆



0 0
原创粉丝点击