欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Qt實(shí)現(xiàn)獲取本機(jī)IP和定位

 更新時(shí)間:2024年11月07日 09:41:53   作者:fengbizhe  
這篇文章主要為大家詳細(xì)介紹了如何使用Qt實(shí)現(xiàn)獲取本機(jī)IP和定位,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言:

在寫一個(gè)天氣預(yù)報(bào)模塊時(shí),需要一個(gè)定位功能,在網(wǎng)上翻來(lái)翻去才找著,放在這里留著回顧下,也幫下有需要的人

一開始我想著直接調(diào)用百度地圖的API來(lái)定位,

然后我就想先獲取本機(jī)IP的方式,然后調(diào)用百度地圖的api來(lái)進(jìn)行對(duì)位,結(jié)果怎么弄都只能獲取到私有IP,私有IP是沒法用來(lái)定位,但還是具體代碼還是貼在這下:

QString MainWindow::getIP()//返回一個(gè)IP地址,但是是私有的
{
    QList<QHostAddress> list=QNetworkInterface::allAddresses();
    foreach (QHostAddress address, list) {
        if(address.protocol()==QAbstractSocket::IPv4Protocol)
            return address.toString();
    }
    return "0.0.0.0";
}

重點(diǎn)來(lái)了,我找到了一個(gè)可以獲取公有IP和當(dāng)前用戶所在市的API,http://whois.pconline.com.cn/ipJson.jsp?json=true,調(diào)用這個(gè)API,就可以了

要調(diào)用之前,要寫一個(gè)類去存放(拆解)返回JSON數(shù)組,很簡(jiǎn)單,畢竟這個(gè)JSON數(shù)組的內(nèi)容很少

#include <QObject.h>
class location{
public:
    location(){
        ip="";
        pro="";
        proCode="";
        city="";
        cityCode=0;
    }
    QString ip;
    QString pro;
    QString proCode;
    QString city;
    QString cityCode;
};

http請(qǐng)求,

在頭文件定義兩個(gè)變量,還有需要用的到函數(shù):

protected:
    //解析本機(jī)外網(wǎng)IP,并獲取所在市
    void locationInfo();
private slots:
    //處理定位API請(qǐng)求
    void onLocationInfoReceived(QNetworkReply *reply);

private:
    //定位數(shù)據(jù)
    location mlocation;
    //定位用的API的請(qǐng)求
    QNetworkAccessManager* mLocationManger;

放在在構(gòu)造函數(shù):

    //定位請(qǐng)求
    mLocationManger=new QNetworkAccessManager(this);
connect(mLocationManger,&QNetworkAccessManager::finished,this,&MainWindow::onLocationInfoReceived);
    locationInfo();
void MainWindow::locationInfo()
{
    QUrl url("http://whois.pconline.com.cn/ipJson.jsp?json=true");
    mLocationManger->get(QNetworkRequest(url));
}
void MainWindow::onLocationInfoReceived(QNetworkReply *reply)
{
    if (reply->error() == QNetworkReply::NoError) {
        QString data = QString::fromLocal8Bit(reply->readAll());
        QJsonDocument jsonDocument = QJsonDocument::fromJson(data.toUtf8());
        QJsonObject jsonObject = jsonDocument.object();
        qDebug()<<"read all:"<<jsonObject;
        mlocation.ip = jsonObject.value("ip").toString();
        mlocation.pro = jsonObject.value("pro").toString();
        mlocation.proCode = jsonObject.value("proCode").toString();
        mlocation.city = jsonObject.value("city").toString();
        mlocation.cityCode = jsonObject.value("cityCode").toString();

    } else {
        qDebug() << "Location request error: " << reply->errorString();
    }
    qDebug()<<mlocation.city;
    //請(qǐng)求天氣信息
    getWeatherInfo(mlocation.city);
    reply->deleteLater();//deleteLater 是 Qt 框架中的一個(gè)方法,用于在對(duì)象的生命周期結(jié)束時(shí)安全地刪除對(duì)象
}

到此這篇關(guān)于使用Qt實(shí)現(xiàn)獲取本機(jī)IP和定位的文章就介紹到這了,更多相關(guān)Qt獲取本機(jī)IP和定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論