QNetworkAccessManager类控制着网络协议

步骤

  1. 在类内部定义网络编程所需的类,包含如下信息

    1. private:
    2. QNetworkAccessManager* manager;
    3. QNetworkReply* reply;
    4. private slots:
    5. void finishSlot(QNetworkReply*reply);

    QNetworkAccessManager是管理类
    QNetworkReply是相应类
    finishSlot是接收相应的槽

  2. 先创建出一个QNetworkAccessManager类

    1. MainWindow::manager = new QNetworkAccessManager(this);
  3. 将Manager的finish信号和接受槽相关联 ```c connect(manager,SIGNAL(finished(QNetworkReply)),this,SLOT(finishSlot(QNetworkReply)));

  1. 4. 编写接收槽函数
  2. ```c
  3. void MainWindow::finishSlot(QNetworkReply *reply)
  4. {
  5. ui->strLab->setText("This is a text");
  6. QTextCodec *codec = QTextCodec::codecForName("utf8");
  7. QString all = codec->toUnicode(reply->readAll());
  8. ui->strLab->setText(all);
  9. }
  1. 发送请求 ```c manager->get(QNetworkRequest(QUrl(“http://localhost:8080/“)));
  1. <a name="ExDTC"></a>
  2. ## get函数封装流程
  3. 1. const char* 封装为QUrl
  4. 1. QUrl封装为QNetworkRequest
  5. 1. QNetworkRequest作为get参数发送
  6. <a name="kWX41"></a>
  7. ## 中文编码问题
  8. ```c
  9. QTextCodec *codec = QTextCodec::codecForName("utf8");
  10. QString all = codec->toUnicode(reply->readAll());

因为reply对象返回的是字节序,字节数组,是完全按照http返回的二进制数据
因此如果想要得到中文或者其他形式的编码,则需要进行二次编码
使用QTextCodec进行编码
编码结果得到的是QString

销毁内存

使用deleteLater函数自动调用系统的内存回收进行销毁

  1. reply->deleteLater();