Qt获取网络信息

QNetworkInterface 是一个管理网络连接的类,利用他可以枚举本机的网络连接并获取其属性。比较常用的函数有:

for (QList<QNetworkInterface>::const_iterator i = networkInterface.const_Begin(); i != networkInterface.const_End(); ++i) 通过迭代器获得所有的网络接口信息

//获取网络地址列表

 QList<QNetworkAddressEntry> addressEntriesList = (*i).addressEntries();
  for (QList<QNetworkAddressEntry>::const_iterator j = addressEntriesList.constBegin(); j != addressEntriesList.constEnd(); ++j) {
    //输出 ip
    qDebug() << (*i).ip().toString();
    //输出 netmask
    qDebug() << (*i).netmask().toString();
    //输出broadcast
    qDebug()<<(*i).broadcast().toString();
  }
}

QString QNetworkInterface::hardwareAddress() 获取网卡 mac 地址。

`QString QNetworkInterface::name()` 获取网卡名称。这个名称是系统分配的,是一个字符串,在 windows 平台,可以将此字符串作为参数传递给 api,用以获取或者设置其他 Qt 不能获取或设置的属性,比如网关、DNS、网卡类型、wins 服务器的获取与设置,可以参考 windows api 中的 getAdapterInfo 和 getPerAdaterInfo 来实现这些功能。

QNetworkInterface::interfaceFromName(),通过名称来获取一个QNetworkInterface的对象或指针,此处名称也是上述所指名称。
QString QNetworkInterface::humanReadableName(),获取网络连接名称,此处名称一般指“本地连接”、“eth0”及“lo”等。
int QNetworkInterface::index(),网卡索引,这是系统在启动时为网卡分配的索引,是一个整型值,当然也可以成为 Qt 与系统 api 之间的接口,就像上的是 name() 一样。
QNetworkInterface QNetworkInterface::interfaceFromIndex ( int index ),通过索引值来获取一个QNetworkInterface的对象或指针,此处索引值即为上述所指整型值。
QList<QHostAddress> QNetworkInterface::allAddresses (),获取地址列表,此处只返回IP地址列表,所以如果只想获取IP地址的话,可以用此函数,例如:

?
//allInterfaces() 是一个静态函数,用于获取本机所以连接。

QList<QNetworkInterface> networkInterface = QNetworkInterface::allInterfaces();
for (QList<QNetworkInterface>::const_iterator i = networkInterface.const_Begin(); i != networkInterface.const_End(); ++i) {
  //获取ip地址列表
  QList<QHostAddress> addressesList = (*i).allAddresses();
  for (QList<QHostAddress>::const_iterator j = addressesList.constBegin(); j != addressesList.constEnd(); ++j) {
    //输出 ip
    qDebug() << (*i).toString();
  }
}

qt获取网络ip地址的类QHhostInfo,QNetworkInterface,QHostAdress

主要介绍常用的QtNetwork Module中的QHostInfo,QHostAddress,QNetworkInterface和QNetAddressEntry等类。

1。QHostInfo类获取主机名和ip地址

(1)获取主机名:

QHostInfo::localHostName()

QString localHostName=QHostInfo::localHostName()

(2)获取ip地址: QHostInfo info=QHostInfo::fromName(localHostName);//根据上边获得的主机名来获取本机的信息

info.addresses();//QHostInfo的address函数获取本机ip地址

如果存在多条ip地址ipv4和ipv6:

foreach(QHostAddress address,info.addresses())

{

    if(address.protocol()==QAbstractSocket::IPv4P)//只取ipv4协议的地址

    qDebug()<<address.toString();

}

如果是ipv6地址,可以使用QAbstractSocket::ipv6Protocol来实现。

QHostAddress类是管理ip地址的类,所有的ip都归这个类管理。

(3)以主机名获取ip

QHostInfo类可以获取任意主机名的ip,比如获取网站的ip地址,可以用lookupHost()函数来获取,他是基于信号和槽的,一旦发现ip地址就会触发槽函数。

首先定义一个槽
QHostInfo::lookupHost("www.baidu.com" ,this,SLOT(lookedUp(QHostInfo)));
void lookedup(const QHostInfo &host)

{

qDebug()<<host.addresses() .first().toString();//输出了第一个 ip地址

}


通过查询百度网址的ip地址,如果查找到,就会执行lookedUp()函数。



(4)通过ip地址获取主机名

调用lookupHost()函数,通过输入ip地址反向查找主机名。将上面的函数换掉。



2QNetworkInterface类获取程序运行本机的ip地址和网络接口信息

QNetworkInterface类提供了程序所运行的主机ip地址和网络接口信息的列表.  在一个网络接口信息中,包含一个或多个ip地址,每一个ip地址又包含和它相关的子网掩码和广播地址.他们三者别封装在一个对象中QNetworkAddressEntry,网络接口信息也包含了硬件地址信息.

QList<QNetworkInterface>list=QNetworkInterface;:allInterfaces();//获取所有网络接口信息

foreach(QNetworkInterface interface,list)

{

//遍历每一个接口信息

qDebug<<"Device:"<<interface.name();//设备名称

qDebug<<"HardwareAddress:"<<interface.hardwareAdderss();//获取硬件地址

QList<QNetworkAddressEntry>entryList=interface.addressEntries();//获取ip地址和子网掩码和广播地址

foreach(QNetworkAddressEntry entry,entryList)

{//遍历ip条目列表

    qDebug<<"IP address:"<<entry.ip().toString();//获取ip

    qDebug<<"Netmask:"<<entry.netmask().toString();//获取子网掩码

    qDebug<<"Broadcast:"<<entry.broadcast().toString();//获取广播地址

}

}




如果只想获取ip地址可以调用QNetworkInterface类的allAddresses()来获取ip地址,如:

QString address=QNetworkInterface::allAddresses().first().toString();


获取所有ip地址:

QListlist=QNetworkInteface::allAddresses();

{

foreach(QHostAddress address,list)

{

    if(address.protocol()==QAbstractSocket::ipv4protocol)

    qDebug<<address.toString();

}

}
“`

### 回答1: Qt界面通过网络获取天气信息的过程,一般可以分为以下几个步骤: 第一步,创建请求对象。使用Qt提供的QNetworkRequest类创建一个请求对象,设置请求的URL地址以及请求的Header信息。 第二步,发送请求。使用Qt的QNetworkAccessManager类发送上述请求对象,调用其get()函数即可发送请求。 第三步,接收相应。Qt的QNetworkAccessManager类会自动接收到服务器的相应信息,可以通过其finished()信号捕捉到这个事件,回调函数中则可以读取响应的信息。 第四步,解析数据。一般天气信息返回的是Json格式数据,我们需要使用Qt的Json解析器Qt Json来解析数据,将其转换成相应的数据结构,例如用QJsonObject表示城市名、温度、天气状况等信息。 第五步,更新UI。将第四步中解析得到的数据结构,通过Qt界面的QLabel、QTextBrowser等控件,动态地更新显示在界面上。 需要注意在整个网络获取天气信息的过程中,需要添加相应的错误处理,例如网络连接失败、天气数据解析出错等等情况,以保证界面能够及时地响应用户的操作。 ### 回答2: Qt界面是一种基于C++的图形用户界面开发框架。这种框架可以帮助开发者创建出漂亮、易于使用、跨平台的应用程序界面。Qt界面中内置了许多通信和网络相关的类库,使得开发者可以很方便地利用网络进行数据的获取和传输。 获取天气信息通常需要连接到一个天气服务的API,通过发送HTTP请求来获取数据,再将数据解析回传给应用程序进行处理。在Qt界面中,可以使用QNetworkAccessManager等相关类库来实现这个过程。具体而言,可以通过下列步骤来实现: 1. 创建一个QNetworkAccessManager对象,该对象可以用于发送HTTP请求和接收响应数据。 2. 构造HTTP请求对象。对于获取天气信息,通常需要指定一个特定的URL,以及HTTP请求头部的一些参数,例如浏览器类型、语言等。 3. 发送HTTP请求,并等待响应。当响应数据到达时,QNetworkAccessManager对象会发出相应的信号,用于通知应用程序已经得到响应数据。 4. 按照天气API返回的格式,解析响应数据,并提取所需要的信息。这部分工作需要根据具体API的规定进行实现。 5. 将解析获得的天气信息显示在Qt界面上。这一过程中,可以利用Qt的控件和布局等功能,将获取到的信息以适当的方式进行展示。 综上所述,Qt界面通过网络获取天气信息可以利用QNetworkAccessManager等类库,通过发送HTTP请求、解析响应数据实现。这种方法具有可靠性高、代码清晰等优点,可以满足大多数天气API的调用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值