步骤
在类内部定义网络编程所需的类,包含如下信息
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. 编写接收槽函数```cvoid 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* 封装为QUrl1. QUrl封装为QNetworkRequest1. QNetworkRequest作为get参数发送<a name="kWX41"></a>## 中文编码问题```cQTextCodec *codec = QTextCodec::codecForName("utf8");QString all = codec->toUnicode(reply->readAll());
因为reply对象返回的是字节序,字节数组,是完全按照http返回的二进制数据
因此如果想要得到中文或者其他形式的编码,则需要进行二次编码
使用QTextCodec进行编码
编码结果得到的是QString
销毁内存
使用deleteLater函数自动调用系统的内存回收进行销毁
reply->deleteLater();
