zoukankan      html  css  js  c++  java
  • Qt之显示网络图片

    简述

    Qt中包含了网络模块-network,我们可以很容易的进行各种网络编程和数据传输,关于network的类很多,其中包含:支持DNS、HTTP、TCP/UDP等众多高级类,可以参考助手。

    下面我们先看一个简单地示例:Qt显示一个网络图片。

    效果

    这里写图片描述

    源码

    创建按钮及显示图像的标签,连接信号槽。

    m_pButton = new QPushButton(this);
    m_pButton->setText(QStringLiteral("开始下载"));
    
    m_pLabel = new QLabel(this);
    m_pLabel->setFixedSize(140, 140);
    m_pLabel->setScaledContents(true);
    
    connect(m_pButton, SIGNAL(clicked(bool)), this, SLOT(startDownload()));

    请求及结果处理,请求完成以后,我们可以去E盘查看下载后的图片。

    // 点击按钮,开始请求
    void MainWindow::startDownload()
    {
        m_pButton->setEnabled(false);
    
        QNetworkRequest request;
        request.setUrl(QUrl("http://avatar.csdn.net/6/9/A/1_u011012932.jpg"));
        connect(&m_networkManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *)));
        m_networkManager.get(request);
    }
    
    // 响应结束,进行结果处理-图片显示或错误处理
    void MainWindow::replyFinished(QNetworkReply *reply)
    {
        m_pButton->setEnabled(true);
    
        // 获取响应状态码,200表示正常
        // QVariant nCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    
        if (reply->error() == QNetworkReply::NoError)
        {
            QByteArray bytes = reply->readAll();
            QPixmap pixmap;
            pixmap.loadFromData(bytes);
            m_pLabel->setPixmap(pixmap);
    
            // 缓存到本地
            QFile file("E:/head.jpg");
            if (file.open(QIODevice::Append))
                file.write(bytes);
    
            file.close();
        }
        else
        {
            // 错误处理-显示错误信息,或显示上一次缓存的图片或叉图。
        }
    }

    处理方式

    请求返回之后,首先我们必须判断错误码或错误状态,如果没有错误,正常读取数据,显示即可。但对于少数发生错误的情况时,我们可以按照下面的方式进行处理:

    1. 显示错误信息,或弹出提示框(不太友好)
    2. 显示叉图
    3. 显示上次缓存过的图片
  • 相关阅读:
    Poj2033
    CodeForces 540
    CodeForces 548
    LeetCode#2 Add Two Numbers
    CodeForces 544A
    POJ 2431Expedition
    HLG1116-选美大赛
    清华学堂 列车调度(Train)
    清华学堂 LightHouse
    清华学堂 Range
  • 原文地址:https://www.cnblogs.com/itrena/p/5938378.html
Copyright © 2011-2022 走看看