您现在的位置是:首页 > 技术文章网站首页技术文章

[Qt]获取本机IP和名称

  • WangYe
  • 2020-12-05 01:00:49
  • 762 次阅读
Qt 获取本机IP和名称

效果:

图片.png


代码:

#include <QCoreApplication>
#include <QDebug>
#include <QHostInfo>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString localHostName = QHostInfo::localHostName();

    qDebug() <<"localHostName:"<<localHostName;
    QHostInfo info = QHostInfo::fromName(localHostName);
    foreach(QHostAddress address,info.addresses())
    {
        if(address.protocol() == QAbstractSocket::IPv4Protocol)
            qDebug() <<"IPV4 Address: "<< address.toString();
    }

    return a.exec();
}

注:

XXXX.pro 添加如下:

QT += network


效果:

图片.png

代码:

/*
 *获取本机Ip地址
 */
#include <QHostAddress>
#include <QNetworkInterface>
void QtScreen::getIp()
{
    QString ipAddress;
    QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
    // use the first non-localhost IPv4 address
    for (int i = 0; i < ipAddressesList.size(); ++i) {
        if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
            ipAddressesList.at(i).toIPv4Address()) {
            ipAddress = ipAddressesList.at(i).toString();
            break;
        }
    }
    // if we did not find one, use IPv4 localhost
    if (ipAddress.isEmpty())
        ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
    qDebug() << "IP为:" << ipAddress;
}

注:

XXXX.pro 添加如下:

QT += network

如装有虚拟机,可能会识别到多个IP,可用以下代码获取:

#include <QNetworkInterface>

#pragma execution_character_set("utf-8")    //解决中文乱码

bool is_virtual_network_card_or_loopback(QString str_card_name)
{
    if (-1 != str_card_name.indexOf("VMware")
        || -1 != str_card_name.indexOf("Loopback")
        || -1 != str_card_name.indexOf("VirtualBox")
        )
        return true;

    return false;
}

/**
 * @brief 获取本机IP地址
 */
void OpenCV_Test::print_local_ip()
{
    // 1. 获取所有网络接口
    QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();

    QList<QNetworkAddressEntry> entry;
    foreach(QNetworkInterface inter, interfaces)
    {
        // 过滤掉不需要的网卡信息
        if (is_virtual_network_card_or_loopback(inter.humanReadableName()))
            continue;

        if (inter.flags() & (QNetworkInterface::IsUp | QNetworkInterface::IsRunning))
        {
            entry = inter.addressEntries();
            if (entry.at(1).ip().protocol() == QAbstractSocket::IPv4Protocol)
            {
                if (-1 != inter.name().indexOf("wireless"))
                    qDebug() << inter.humanReadableName() << inter.name() << " 无线网IP: " << entry.at(1).ip().toString();
                else if (-1 != inter.name().indexOf("ethernet"))
                    qDebug() << inter.humanReadableName() << inter.name() << " 以太网IP: " << entry.at(1).ip().toString();
            }
            entry.clear();
        }
    }
}

效果:

图片.png

TAG: Qt IP Name 本机

文章评论 (0)



Top