Qt学习笔记网络(一)
Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定
新建一个控制台应用程序
看一下QNetworkAccessManager的帮助文档

需要添加Qt + =network

新建一个类
.h文件
#ifndef DOWNPAGES_H
#define DOWNPAGES_H
#include<QNetworkAccessManager>
#include <QObject> class DownPages : public QObject
{
Q_OBJECT
public:
explicit DownPages(QObject *parent = );
void Do_Download();
signals: public slots:
void replyFinished(QNetworkReply*);
private :
QNetworkAccessManager *manager;
}; #endif // DOWNPAGES_H
我们声明了一个 QNetworkAccesManager
在.cpp里我们把它初始化并把它的finshed信号关联槽
并判断状态是如果 是200也就是请求正常状态把页面输出
.cpp文件
#include "downpages.h"
#include <QNetworkRequest>
#include<QNetworkReply>
#include<QDebug>
#include<QTextCodec>
DownPages::DownPages(QObject *parent) :
QObject(parent)
{
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*))); QUrl url;
//url.setUrl("http://www.cnblogs.com/a/b");
//url.setUrl("http://www.baidu.com/");
url.setUrl("http://www.sibaieteco.com/");
//url.setUrl("www.abaibduc.com");
QNetworkRequest request(url); manager->get(request);
} void DownPages::Do_Download()
{ }
/*
* 请求完成
*
*
*/
void DownPages::replyFinished(QNetworkReply * reply)
{
//查看是否有错误
switch(reply->error())
{
//如果没有错误把页面输出
case QNetworkReply::NoError:
qDebug()<<"no error"; {
QTextCodec * cod=QTextCodec::codecForName("utf-8");
QString str=cod->toUnicode(reply->readAll());
qDebug()<<str;
}
break;
case QNetworkReply::ContentNotFoundError:
{
QUrl failedUrl;
failedUrl = reply->request().url();
int httpStatus = reply->attribute(
QNetworkRequest::HttpStatusCodeAttribute).toInt();
QString reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
qDebug()<<"url"<<failedUrl <<httpStatus<<" "<<reason;
}
break;
default:
{
qDebug()<<"Have error"<<reply->errorString()<<" error "<<reply->error();
}
}
qDebug()<<"finished";
}
再在这个基础上添加一个下载功能
.h文件
#ifndef DOWNPAGES_H
#define DOWNPAGES_H
#include<QNetworkAccessManager>
#include <QObject>
#include <QFile>
class QNetworkReply; class DownPages : public QObject
{
Q_OBJECT
public:
explicit DownPages(QObject *parent = );
void Do_Download();
signals: public slots:
void replyFinished(QNetworkReply*);
void readyRead();
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void downFinished();
private :
QNetworkAccessManager *manager;
QNetworkReply * managerReply;
QFile *file; }; #endif // DOWNPAGES_H
.cpp文件
主要是添加 了这三个信号
managerReply = manager->get(request);
connect(managerReply,SIGNAL(readyRead()),this,SLOT(readyRead()));
connect(managerReply,SIGNAL(downloadProgress(qint64,qint64)),
this,SLOT(downloadProgress(qint64,qint64)));
connect(managerReply,SIGNAL(finished()),this,SLOT(downFinished()));
readyRead()开始下载数据
DownloadProgress显示下载的进度
还有一个finished
#include "downpages.h"
#include <QNetworkRequest>
#include<QNetworkReply>
#include<QDebug>
#include<QTextCodec>
#include<QFileInfo>
#include<QDir>
DownPages::DownPages(QObject *parent) :
QObject(parent)
{
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*))); QUrl url;
//url.setUrl("http://www.cnblogs.com/a/b");
//url.setUrl("http://www.baidu.com/");
//url.setUrl("http://www.sibaieteco.com/");
url.setUrl("http://files.cnblogs.com/li-peng/WPFMultLanguageDemo.rar");
QNetworkRequest request(url); managerReply = manager->get(request);
connect(managerReply,SIGNAL(readyRead()),this,SLOT(readyRead()));
connect(managerReply,SIGNAL(downloadProgress(qint64,qint64)),
this,SLOT(downloadProgress(qint64,qint64)));
connect(managerReply,SIGNAL(finished()),this,SLOT(downFinished()));
} void DownPages::Do_Download()
{ } void DownPages::replyFinished(QNetworkReply * reply)
{ switch(reply->error())
{ case QNetworkReply::NoError:
qDebug()<<"no error"; {
QTextCodec * cod=QTextCodec::codecForName("utf-8");
QString str=cod->toUnicode(reply->readAll());
//qDebug()<<str;
}
break;
case QNetworkReply::ContentNotFoundError:
{
QUrl failedUrl;
failedUrl = reply->request().url();
int httpStatus = reply->attribute(
QNetworkRequest::HttpStatusCodeAttribute).toInt();
QString reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
qDebug()<<"url"<<failedUrl <<httpStatus<<" "<<reason;
}
break;
default:
{
qDebug()<<"Have error"<<reply->errorString()<<" error "<<reply->error();
}
}
qDebug()<<"finished";
} void DownPages::readyRead()
{
QFileInfo fileinfo(managerReply->url().path());
QString thefileName = fileinfo.fileName().isEmpty()?"index.html":fileinfo.fileName(); QString thePath ="E:/Test/Down/";
//qDebug()<<thePath;
QDir createfile;
bool exist = createfile.exists(thePath);
if(!exist)
{
createfile.mkpath(thePath);
}
thePath +=thefileName;
file=new QFile(thePath); // if(file->open(QIODevice::Append))
// {
// file->write(managerReply->readAll());
// file->flush();
// file->close();
// }
if(file->open(QIODevice::Append ))
{
file->write(managerReply->readAll());
qDebug()<<"flu";
file->flush();
}
//delete file;
} void DownPages::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
qDebug()<<"Total: "<<bytesTotal<<" current received : "<<bytesReceived;
} void DownPages::downFinished()
{
file->flush();
file->close();
delete file;
}
file->open(QIODevice::Append)
| 枚举值 | 描述 |
QIODevice::NotOpen |
未打开 |
QIODevice::ReadOnly |
以只读方式打开 |
QIODevice::WriteOnly |
以只写方式打开 |
QIODevice::ReadWrite |
以读写方式打开 |
QIODevice::Append |
以追加的方式打开,新增加的内容将被追加到文件末尾 |
QIODevice::Truncate |
以重写的方式打开,在写入新的数据时会将原有数据全部清除,游标设置在文件开头。 |
QIODevice::Text |
在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n |
QIODevice::Unbuffered |
忽略缓存 |
Qt学习笔记网络(一)的更多相关文章
- Qt学习笔记网络(URL和下载的功能都有)
http://www.cnblogs.com/li-peng/p/3656613.html
- qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...
- Qt学习笔记-Widget布局管理
Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...
- QT学习笔记(一)——Helloworld
QT学习笔记(一)--Helloworld 一.调试的基本方法: Log调试法 --在代码中加入一定的打印语句 --打印程序状态和关键变量的值 断点调试法: --在开发环境中的对应代码行加上断点 -- ...
- qt学习笔记(七)之数据库简介(所有支持数据库类型的列表)
笔者最近用Qt写公司的考勤机.本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手. 废话不 ...
- Qt学习笔记(2)-利用StackWidget实现选项卡式页面
学习笔记第二篇,利用Qt实现选项卡式的页面,效果如图1.1-图1.3所示.程序实现的功能是通过点击状态栏实现不同页面的切换,实际上Qt中自带有Tab选项卡式的控件,本文利用StackWidge实现类似 ...
- Qt学习笔记(1) hello world
Qt的简介: Qt是一个跨平台的C++ GUI库实现,原本只是以为它只提供一些图形接口,看来我还是低估了它,采用文档Qt学习之路2开始学习,不知道这个文档是不是有点老了,管他呢,先了解下. 搭建环境: ...
- Qt学习之网络编程(一)
一些说明 学了有一段时间的python了,小项目做了不少,最近由于项目需要,所以要回归老本行了,开始重点突击C++和qt.python的网络爬虫系列有时间就更吧. 获取本机网络信息 在网络应用中,经常 ...
- 【Qt学习笔记】Qt+VS2010的配置
http://blog.csdn.net/jocyln9026/article/details/8575218 关于Qt Qt是1991年由Trolltech公司开发的一个跨平台的C++图形用户界面应 ...
随机推荐
- node模块的分类
模块的分类 1.核心模块 2.文件模块 3.第三方模块(npm安装的) 模块的引用: 1.路径 2.模块名 模块的流程: 1.创建模块:teacher.js 2.导出模块:exports.add=fu ...
- mac 远程连接服务器
很多刚用mac的同学 可能会纠结,连接远程服务器咋整? 有没有类型windows上的securecrt 其实,完全可以不用: mac自带的终端就可以搞定:终端terminal 如何连接远程服务器? s ...
- 每日Scrum(6)
今天是小组正式冲刺的第六天,软件的各种结尾工作,还有一些模块就已经全部实现了: 遇到的问题主要是对于自己能力的担忧,以前总是想,如果自己努力,就会怎样成功,其实并不是那样,小小的距离就是很远的能力差距 ...
- druid连接池异常
在从excel导入10W条数据到mysql中时,运行一段时间就会抛这个异常,连接池问题 org.springframework.transaction.CannotCreateTransactionE ...
- 操作linux命令
一.Linux下重启Tomcat 1. 进入tomcat下的bin目录:cd /user/standard/tomcat/bin; 使用关闭命令:./shutdown.sh; 查看Java进程是否关闭 ...
- 第二题 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
package com.hanqi.test; import java.util.ArrayList; import java.util.List; import java.util.Random; ...
- 首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能
//计算器 jisuanqi jsq=new jisuanqi(); System., )); System., , )); System.out.println("2.3和4.5 中最大的 ...
- 0002 Oracle账户相关的几个语句
Oracle安装完成后,在“开始”里找到SQL Plus运行,要求输入帐号和密码,用system/密码连接. 1.Oracle里有一个默认的scott账户密码tiger,用该账户连接: CONN 用户 ...
- Win7下硬盘安装Ubuntu 12.04.3双系统
一. 准备工作 1. 下载ubuntu镜像文件:Ubuntu-12.04.3-desktop-amd64.iso(4G及以上内存建议64位),注意这个amd并不是指amd芯片. 2. 下载硬盘分区工具 ...
- Linux磁盘管理之设备文件详解04
Linux一切接文件,除了普通文件和目录文件,还包括一些其它的特殊文件:块设备文件.字符设备文件.套接字文件.链接文件等.今天这里主要说一下常见的块设备文件和字符设备文件,这2类是最常见的设备文件类. ...