• 4844阅读
  • 1回复

我想继承QObject写一个网络文件下载类,但槽函数没有被调用。 [复制链接]

上一主题 下一主题
离线逸凡
 
只看楼主 倒序阅读 楼主  发表于: 2013-04-16
帮我看看哪里写错了,下面是代码:QHttpDownLoad.h

#ifndef QHTTPDOWNLOAD_H
#define QHTTPDOWNLOAD_H


#include <QWidget>


#include <QUrl>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>
#include <QObject>
class QHttpDownLoad : public QObject
{
    Q_OBJECT


public:
    QHttpDownLoad(QObject *parent = 0);
    ~QHttpDownLoad();
    void startRequest(QUrl url);
    void down();  
private slots:
        void httpFinished();  
        void httpReadyRead();
private:

    QNetworkAccessManager *manager;
    QNetworkReply *reply;
    QUrl url;  
    QFile *file;
};


#endif // QHTTPDOWNLOAD_H






QHttpDownLoad.cpp

#include "qhttpdownload.h"
#include <QMessageBox>
QHttpDownLoad::QHttpDownLoad(QObject *parent)
    : QObject(parent)
{
    
    manager = new QNetworkAccessManager(this);


}


QHttpDownLoad::~QHttpDownLoad()
{


}


void QHttpDownLoad::startRequest( QUrl url )
{
    reply = manager->get(QNetworkRequest(url));
    connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));//这个2个槽函数没有被调用
    connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
}


void QHttpDownLoad::down()
{
    QString fileName = "F:\\test.html";
    file = new QFile(fileName);
    if(!file->open(QIODevice::WriteOnly))


    {  
        delete file;
        file = 0;
        return;
    }
    startRequest(QUrl("http://www.baidu.com/"));  
}


void QHttpDownLoad::httpFinished()
{
    file->flush();


    file->close();


    QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
    if (reply->error()) {
        file->remove();
    } else if (!redirectionTarget.isNull()) {    
        QUrl newUrl = url.resolved(redirectionTarget.toUrl());    
        url = newUrl;
        reply->deleteLater();
        file->open(QIODevice::WriteOnly);
        file->resize(0);
        startRequest(url);
        return;


    }
    reply->deleteLater();
    reply = 0;
    delete file;
    file = 0;
}


void QHttpDownLoad::httpReadyRead()
{
    if (file)
        file->write(reply->readAll());
}





在线toby520

只看该作者 1楼 发表于: 2013-04-16
想知道调用该类的一些代码
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
快速回复
限100 字节
 
上一个 下一个