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. 显示上次缓存过的图片
相关文章
|
12月前
|
SQL 存储 数据库
《深度剖析SQL数据类型转换:隐式与显式的奥秘》
在SQL中,数据类型转换是基础且关键的操作,分为隐式和显式转换。隐式转换由系统自动完成,虽便捷但可能带来性能损耗、索引失效及数据准确性风险;显式转换通过函数(如CAST、CONVERT)手动实现,更精确可控,能提升性能、增强代码可读性和保障数据准确性。掌握两者特点与应用场景,合理选择转换方式,对编写高效稳定的SQL代码至关重要。同时,注意数据兼容性与错误处理,确保转换操作顺利进行,避免潜在问题。
286 5
|
监控 网络协议 Linux
在Linux中,如何排查网络连接问题?
在Linux中,如何排查网络连接问题?
|
人工智能 自然语言处理 前端开发
Python 潮流周刊#17:Excel 终于支持 Python 了、Meta 重磅开源新项目、Mojo 新得 1 亿美元融资
Python 潮流周刊#17:Excel 终于支持 Python 了、Meta 重磅开源新项目、Mojo 新得 1 亿美元融资
240 1
|
JSON JavaScript 数据格式
【经验分享】如何使用scroll-view + swiper制作tabs导航条组件。
【经验分享】如何使用scroll-view + swiper制作tabs导航条组件。
236 7
|
Java iOS开发 MacOS
使用JDK自带的keytool工具生成签名文件
使用JDK自带的keytool工具生成签名文件
293 0
|
网络安全 Python
python接口自动化(十二)--https请求(SSL)(详解)
本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) 小编环境:
1136 0
python接口自动化(十二)--https请求(SSL)(详解)
|
Java Windows
Windows 10配置JAVA 环境变量
Windows 10配置JAVA 环境变量的具体步骤
3648 0
Windows 10配置JAVA 环境变量
|
UED
如何评估需求优先级?
项目的需求来源有很多方面,最终由产品经理整理出来哪些要做,哪些不做。我前面说过需求评审时,要讲清楚这次版本的目的是什么。这些要做的功能就是达成目的的手段。
475 0
如何评估需求优先级?
|
Oracle 关系型数据库 SQL
Oracle CASE WHEN 用法介绍
1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASEWHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 2.
2356 0

热门文章

最新文章