步骤
在类内部定义网络编程所需的类,包含如下信息
private:
QNetworkAccessManager* manager;
QNetworkReply* reply;
private slots:
void finishSlot(QNetworkReply*reply);
QNetworkAccessManager是管理类
QNetworkReply是相应类
finishSlot是接收相应的槽先创建出一个QNetworkAccessManager类
MainWindow::manager = new QNetworkAccessManager(this);
将Manager的finish信号和接受槽相关联 ```c connect(manager,SIGNAL(finished(QNetworkReply)),this,SLOT(finishSlot(QNetworkReply)));
4. 编写接收槽函数
```c
void MainWindow::finishSlot(QNetworkReply *reply)
{
ui->strLab->setText("This is a text");
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(reply->readAll());
ui->strLab->setText(all);
}
- 发送请求 ```c manager->get(QNetworkRequest(QUrl(“http://localhost:8080/“)));
<a name="ExDTC"></a>
## get函数封装流程
1. const char* 封装为QUrl
1. QUrl封装为QNetworkRequest
1. QNetworkRequest作为get参数发送
<a name="kWX41"></a>
## 中文编码问题
```c
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(reply->readAll());
因为reply对象返回的是字节序,字节数组,是完全按照http返回的二进制数据
因此如果想要得到中文或者其他形式的编码,则需要进行二次编码
使用QTextCodec进行编码
编码结果得到的是QString
销毁内存
使用deleteLater函数自动调用系统的内存回收进行销毁
reply->deleteLater();