QT的网络东西也蛮多的,我们今天先学一部分,然后后面在学一部分吧
一个能使用网络的应用,我们需要在项目工程中的pro文件里进行标记
QT += core gui
#标记 网络
QT += network
然后我们来看下这一段代码
void MainWindow::getHost()
{
//获取主机名
QString localHostName = QHostInfo::localHostName();
qDebug() << "主机名:" + localHostName;
//获取Ip
QHostInfo info = QHostInfo::fromName(localHostName);
QList list = info.addresses();
if(!list.isEmpty())
{
qDebug() << "ip:" + list.first().toString();
}
//我们还可以获取更多
//返回在主机上找到的所有网络接口的列表
QList 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 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
#include
#include
#include
#include
#include
我就来简单的说一下这些的作用吧
我们首先通过QHostInfo的静态函数localHostName获取到主机名,关于localHostName,我们可以看下助手上的解释
返回的就是主机名,好,我们接下来呢,又通过fromName来获取ip地址,来看下关于fromName的解释
他需要传一个name,翻译过来的意思就是:
查找给定主机名的IP地址,在查找过程中,函数会阻塞,这意味着程序的执行会暂停,直到查找的结果就绪为止。返回在QHostInfo对象中查找的结果,如果您传递一个文字IP地址而不是主机名,QHostInfo将搜索IP的域名(即QHostInfo将执行反向查找。在成功时,返回的QHostInfo将包含解析的域名和主机名的IP地址。
可以发现这里返回的是一个list,我们便能获取到所有的IP地址了,我这里只打印了第一个而已,紧接着我们通过QNetworkInterface的静态函数allInterfaces获取到所有的我们想要的信息了,可以看下运行结果
接下来我们看下如何去实现GET请求吧!
我们会使用的三个类
#include
#include
#include
我们也是通过一个信号去做处理的
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了
好的,这些知识点还都比较浅,我们后续一步步的来实现更多的技巧。