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,我们可以看下助手上的解释

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

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

QT开发(八)—— Network网络操作,本地HOST,GET请求_主机名_02

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

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

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

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

接下来我们看下如何去实现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