Qt之显示网络图片

简述

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

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

效果

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. 显示上次缓存过的图片
上一篇:曲演杂坛--使用CTE时踩的小坑:No Join Predicate


下一篇:[BZOJ1529][POI2005]ska Piggy banks