Qt之显示网络图片

简介: 简述Qt中包含了网络模块-network,我们可以很容易的进行各种网络编程和数据传输,关于network的类很多,其中包含:支持DNS、HTTP、TCP/UDP等众多高级类,可以参考助手。下面我们先看一个简单地示例:Qt显示一个网络图片。简述效果源码处理方式效果源码创建按钮及显示图像的标签,连接信号槽。m_pB

简述

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. 显示上次缓存过的图片
目录
相关文章
|
存储 Cloud Native Linux
C++ QT 实时进行网络监测
C++ QT 实时进行网络监测
|
4月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
635 7
|
3月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
151 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
3月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
3月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
|
6月前
|
网络协议 算法 网络性能优化
Qt TCP网络上位机的设计(通过网络编程与下位机结合)
Qt TCP网络上位机的设计(通过网络编程与下位机结合)
Qt TCP网络上位机的设计(通过网络编程与下位机结合)
|
4月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
6月前
|
网络协议 网络安全 API
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
691 1
|
6月前
|
域名解析 缓存 网络协议
探索Qt 网络编程:网络地址与服务类全解析
探索Qt 网络编程:网络地址与服务类全解析
139 0

推荐镜像

更多