本文共 1474 字,大约阅读时间需要 4 分钟。
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 { // 错误处理-显示错误信息,或显示上一次缓存的图片或叉图。 }}
请求返回之后,首先我们必须判断错误码或错误状态,如果没有错误,正常读取数据,显示即可。但对于少数发生错误的情况时,我们可以按照下面的方式进行处理: