QT开发(八)—— Network网络操作,本地HOST,GET请求

QT的网络东西也蛮多的,我们今天先学一部分,然后后面在学一部分吧

一个能使用网络的应用,我们需要在项目工程中的pro文件里进行标记

QT       += core gui
#标记 网络
QT       += network

然后我们来看下这一段代码

void MainWindow::getHost()
{
    //获取主机名
    QString localHostName = QHostInfo::localHostName();
    qDebug() << "主机名:" + localHostName;

    //获取Ip
    QHostInfo info = QHostInfo::fromName(localHostName);
    QList<QHostAddress> list = info.addresses();
    if(!list.isEmpty())
    {
        qDebug() << "ip:" + list.first().toString();
    }

    //我们还可以获取更多

    //返回在主机上找到的所有网络接口的列表
    QList<QNetworkInterface> listImpl = QNetworkInterface::allInterfaces();
    if(!listImpl.isEmpty())
    {
        for (int i = 0; i < listImpl.length(); ++i) {
            QNetworkInterface interface = listImpl.at(i);
            qDebug() << "设备:" + interface.name();
            qDebug() << "硬件地址:" + interface.hardwareAddress();
            //返回该接口所拥有的IP地址列表及其相关的网络掩码和广播地址。
            QList<QNetworkAddressEntry> enrtyList = interface.addressEntries();
            for (int j = 0; j < enrtyList.length(); ++j) {
                QNetworkAddressEntry entry = enrtyList.at(j);
                qDebug() << "IP:" + entry.ip().toString();
                qDebug() << "子网掩码:" + entry.netmask().toString();
                qDebug() << "广播地址:" + entry.broadcast().toString();
            }
        }
    }
}

这一段代码实际上很简单就是调用了对应的函数,我们include的类也很多

#include <QDebug>
#include <QString>
#include <QList>
#include <QHostInfo>
#include <QHostAddress>
#include <QNetworkInterface>

我就来简单的说一下这些的作用吧

我们首先通过QHostInfo的静态函数localHostName获取到主机名,关于localHostName,我们可以看下助手上的解释

这里写图片描述

返回的就是主机名,好,我们接下来呢,又通过fromName来获取ip地址,来看下关于fromName的解释

这里写图片描述

他需要传一个name,翻译过来的意思就是:

查找给定主机名的IP地址,在查找过程中,函数会阻塞,这意味着程序的执行会暂停,直到查找的结果就绪为止。返回在QHostInfo对象中查找的结果,如果您传递一个文字IP地址而不是主机名,QHostInfo将搜索IP的域名(即QHostInfo将执行反向查找。在成功时,返回的QHostInfo将包含解析的域名和主机名的IP地址。

可以发现这里返回的是一个list,我们便能获取到所有的IP地址了,我这里只打印了第一个而已,紧接着我们通过QNetworkInterface的静态函数allInterfaces获取到所有的我们想要的信息了,可以看下运行结果

这里写图片描述

接下来我们看下如何去实现GET请求吧!

我们会使用的三个类

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>

我们也是通过一个信号去做处理的

connect(this->manger,SIGNAL(finished(QNetworkReply*)),this,SLOT(parsingJson(QNetworkReply*)));

这里用到的manager是一个指针,需要先初始化一下

this->manger = new QNetworkAccessManager(this);

然后我们看一下怎么去调用

void MainWindow::getNetData()
{
    //设置发送数据
    this->network_request.setUrl(QUrl("http://gank.io/api/data/Android/10/1"));
    //发送信息
    this->manger->get(this->network_request);
}

嗯,很简单,只要设置url然后调用get即可,随后我们在槽函数中可以接受到返回的结果

void MainWindow::parsingJson(QNetworkReply * reply)
{
    QString all = reply->readAll();
    qDebug() << all ;
}

这样就能获取到json了

好的,这些知识点还都比较浅,我们后续一步步的来实现更多的技巧。

有兴趣的可以加群:690351511

猜你喜欢

转载自blog.csdn.net/qq_26787115/article/details/80003524