欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

QT在linux下获取网络类型

程序员文章站 2022-11-06 23:52:42
开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4G或者网线),在这里给大家一块分享下: 1、这里有一个linux指令:nmcli(大家自行百度即可) 2、nmcli device status 这个指令就会打印出你想要的东西 3、如何用QT去调取这个指令获取结果来进行上报呢?来一段代码 ......

开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4g或者网线),在这里给大家一块分享下:

1、这里有一个linux指令:nmcli(大家自行百度即可)

2、nmcli device status    这个指令就会打印出你想要的东西

3、如何用qt去调取这个指令获取结果来进行上报呢?来一段代码吧

//执行linux指令获取返回结果
qstring common::executelinuxcmd(qstring strcmd)
{
    qprocess p;
    p.start("bash", qstringlist() <<"-c" << strcmd);
    p.waitforfinished();
    qstring strresult = p.readallstandardoutput();
    return strresult;
}

//获取网络状态码
int plc::networkstatus()
{
    qstring strdevice = common::executelinuxcmd("nmcli device status");
    qstringlist listdevice = strdevice.split("\n");
    qstring strbin = "";
    qstring strwifi = "0";
    qstring str4g = "0";
    qstring strwired = "0";
    foreach(qstring tmpstr , listdevice)
    {
        qstringlist strsplit = tmpstr.split(" ");
        qstringlist strtotal;
        foreach(qstring str, strsplit)
        {
            if(str != "")
            {
                strtotal.append(str);
            }
        }
        if(strtotal.size() >= 3)
        {
            if(strtotal.at(2) == "connected")
            {
                if(strtotal.at(1) == "wifi")
                {
                    strwifi = "1";
                }else if(strtotal.at(1) == "ethernet")
                {
                    strwired = "1";
                }else if(strtotal.at(1) == "gsm")
                {
                    str4g = "1";
                }
            }
        }
    }
    strbin.append(str4g).append(strwifi).append(strwired);
    int result = bintodec(strbin);
    return result;
}