Qt官方示例-Http

通过get接口对url资源下载,并显示下载进度。

0x00 Http请求

void HttpWindow::startRequest(const QUrl &requestedUrl)
{
    ...
    reply = qnam.get(QNetworkRequest(url));
    connect(reply, &QNetworkReply::finished, this, &HttpWindow::httpFinished);
    connect(reply, &QIODevice::readyRead, this, &HttpWindow::httpReadyRead);

    ProgressDialog *progressDialog = new ProgressDialog(url, this);
    progressDialog->setAttribute(Qt::WA_DeleteOnClose);
    connect(progressDialog, &QProgressDialog::canceled, this, &HttpWindow::cancelDownload);
    connect(reply, &QNetworkReply::downloadProgress, progressDialog, &ProgressDialog::networkReplyProgress);
    connect(reply, &QNetworkReply::finished, progressDialog, &ProgressDialog::hide);
    ...
}

0x01 下载进度

  使用以下接口获取下载进度。

void QNetworkReply::downloadProgress(qint64 bytesReceived, 
                                     qint64 bytesTotal);

0x02 网络验证(如有需要)

  绑定authenticationRequired信号:

connect(&qnam, &QNetworkAccessManager::authenticationRequired,
        this, &HttpWindow::slotAuthenticationRequired);

  验证动作:

oid HttpWindow::slotAuthenticationRequired(QNetworkReply *, QAuthenticator *authenticator)
{
    ...
    // Did the URL have information? Fill the UI
    // This is only relevant if the URL-supplied credentials were wrong
    ui.userEdit->setText(url.userName());
    ui.passwordEdit->setText(url.password());

    if (authenticationDialog.exec() == QDialog::Accepted) {
        authenticator->setUser(ui.userEdit->text());
        authenticator->setPassword(ui.passwordEdit->text());
    }
}

0x03 关于更多

  • 在QtCreator软件可以找到:
  • 或在以下Qt安装目录找到
C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\network\http
  • 相关链接
https://doc.qt.io/qt-5/qtnetwork-http-example.html

本文分享自微信公众号 - Qt君(qtjuna)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Qt简单屏幕截图(兼容Qt4/5)

    Qt君
  • 兼容Qt4/Qt5版本的QML例程

    Qt君
  • malloc与calloc

    Qt君
  • Cassandra应用实践

    执行bin/cqlsh ip即可cassandra的shell客户端,可以执行的CQL命令和mysql比较类似。

    用户2003442
  • MCMC(二)马尔科夫链

        在MCMC(一)蒙特卡罗方法中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或者离散求和的方法,但是这个方法需要得到对应的概率分布的样本...

    刘建平Pinard
  • Crypto算法库详解

    Crypto 算法库在 python 中最初叫 pycrypto,这个作者有点懒,好几年没有更新,后来就有大佬写了个替代库 pycryptodome。这个库目前...

    py3study
  • 后端技术杂谈6:白话虚拟化技术

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • CV学习笔记(九):光流法的实现

    在这一篇文章中,我们使用OpenCV中的calcOpticalFlowPyrLK()函数来实现,是基于金字塔LK光流算法,计算某些点集的稀疏光流。

    云时之间
  • CV学习笔记(九):光流法的实现

    在这一篇文章中,我们使用OpenCV中的calcOpticalFlowPyrLK()函数来实现,是基于金字塔LK光流算法,计算某些点集的稀疏光流。

    云时之间
  • Cisco双ISP双链路NAT接入案例

    R1、R2作为本地网络12.0.0.0/24、21.0.0.0/24的网关,为连接远端R5上的网段5.0.0.0/24,分别向两个ISP(ISP1、ISP2)申...

    释然

扫码关注云+社区

领取腾讯云代金券