目录
网络操作的类
主要是QNetworkRequest、QNetworkReply和 QNetworkAccessManager。
QNetworkRequest类
通过一个URL地址发起网络协议请求,也保存网络请求的信息。目前支持HTTP、FTP和本地文件上传和下载等。
QNetworkAccessManager类
用于协调网络操作。在QNetworkRequest 发起一个网络请求后,QNetworkAccessManager类负责发送网络请求,创建网络响应。该类还协调cookies
的使用,身份验证请求,及其代理的使用等。
QNetworkAccessManager * manager = new QNetworkAccessManager ( this );
connect(manager , &QNetworkAccessManager::finished, this, &MyClass::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
QNetworkReply类
表示网络请求的响应。由 QNetworkAccessManager在发送一个网络请求后创建一个网络响应。QNetworkReply 提供的信号finished()、readyRead()和 downloadProgress()可以监测网络响应的执行情况,执行相应操作。QNetworkReply是QIODevice的子类,所以QNetworkReply支持流读写功能,也支持异步或同步工作模式。
注意:不要使用deleteLater()删除连接到该信号(finished())槽中的对象。
readyRead()
信号继承自QIODevice
类,每当有新的数据可以读取时,都会发射该信号;
每当网络请求的下载进度更新时都会发射downloadProgress()
信号,它用来更新进度条。
downloadProgress(qint64, qint64)
ui->progressBar->setMaximum(totalBytes); //第二个参数
ui->progressBar->setValue(bytesRead); //第一个
private slots:
void replyFinished(QNetworkReply *);
private:
QNetworkAccessManager *manager; //用来发送网络请求和接收应答
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this,
SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("输入地址")));//get()函数返回一个QNetworkReply对象
//槽函数replyFinished QNetworkReply继承自QIODevice类
replyFinished(QNetworkReply* reply)
{
QString all = reply->readAll(); //获取所有的应答数据
reply->deleteLater(); //完成数据的读取之后,需要删除reply对象
}