Qt之获取机器对应的MAC及IP地址
一、相关函数介绍
1.QHostInfo::localHostName()函数
QHostInfo::localHostName()函数是 Qt 网络模块中的函数,用于获取本地主机(计算机)的主机名。主机名是计算机在网络上的标识,通常是一个字符串,用于识别计算机。这个函数返回一个字符串,表示本地主机的主机名。
函数原型如下:
QString QHostInfo::localHostName();
以下是一些使用示例:
#include <QCoreApplication>
#include <QHostInfo>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 获取本地主机名
QString localHostName = QHostInfo::localHostName();
qDebug() << "本地主机名:" << localHostName;
return a.exec();
}
2.QHostInfo::fromName函数
QHostInfo::fromName 函数用于执行域名解析,将主机名解析为 IP 地址信息。它可以用于查找主机名对应的 IP 地址,或者查找一个 IP 地址对应的主机名。这个函数返回一个 QHostInfo 对象,其中包含了有关解析结果的信息,如 IP 地址列表和主机名。
函数原型如下:
static QHostInfo QHostInfo::fromName(const QString &name);
其中 name 参数是要解析的主机名或 IP 地址。
#include <QCoreApplication>
#include <QHostInfo>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 解析主机名到 IP 地址
QHostInfo hostInfo = QHostInfo::fromName("www.example.com");
if (hostInfo.error() == QHostInfo::NoError) {
qDebug() << "主机名:" << hostInfo.hostName();
qDebug() << "IP 地址列表:";
foreach (const QHostAddress &address, hostInfo.addresses()) {
qDebug() << address.toString();
}
} else {
qDebug() << "解析错误:" << hostInfo.errorString();
}
return a.exec();
}
3.QNetworkInterface::allInterfaces函数
QNetworkInterface::allInterfaces()用于获取计算机上所有网络接口的信息。它返回一个包含 QNetworkInterface 对象的列表,每个对象代表一个网络接口,提供有关接口的信息,如接口名称、MAC 地址、IP 地址等。
函数的原型:
QList<QNetworkInterface> QNetworkInterface::allInterfaces();
以下是一个示例,演示如何使用 QNetworkInterface::allInterfaces() 函数来获取计算机上的网络接口信息:
#include <QCoreApplication>
#include <QNetworkInterface>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QNetworkInterface> networkInterfaces = QNetworkInterface::allInterfaces();
qDebug() << "所有网络接口信息:";
foreach (const QNetworkInterface &iface, networkInterfaces) {
qDebug() << "接口名称:" << iface.name();
qDebug() << "MAC 地址:" << iface.hardwareAddress();
QList<QNetworkAddressEntry> addresses = iface.addressEntries();
foreach (const QNetworkAddressEntry &entry, addresses) {
qDebug() << "IP 地址:" << entry.ip().toString();
qDebug() << "子网掩码:" << entry.netmask().toString();
}
qDebug() << "---------------------";
}
return a.exec();
}
二、完整代码示例
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("获取Windows IP的配置信息");
this->setFixedSize(250, 100);
m_pHostLab = new QLabel("主机名:", this);
m_pLineEditHost = new QLineEdit(this);
m_pIpLab = new QLabel("MAC地址:", this);
m_pLineEditIp = new QLineEdit(this);
m_pButDisply = new QPushButton("获取IP配置信息", this);
connect(m_pButDisply, &QPushButton::clicked, this, &MainWindow::winHostInfo);
m_pGlayout = new QGridLayout(this);
m_pGlayout->addWidget(m_pHostLab, 0, 0);
m_pGlayout->addWidget(m_pLineEditHost, 0, 1);
m_pGlayout->addWidget(m_pIpLab, 1, 0);
m_pGlayout->addWidget(m_pLineEditIp, 1, 1);
m_pGlayout->addWidget(m_pButDisply, 2, 0, 1, 2);
this->getHostInfo();
}
MainWindow::~MainWindow()
{
}
void MainWindow::getHostInfo()
{
QString strHostName = QHostInfo::localHostName();
m_pLineEditHost->setText(strHostName);
QHostInfo hostInfo = QHostInfo::fromName(strHostName);
QList<QHostAddress> listAddress = hostInfo.addresses();
m_pLineEditIp->setText(listAddress.first().toString());
}
void MainWindow::winHostInfo()
{
QString strTemp;
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
for (int i = 0; i < list.count(); i++) {
QNetworkInterface interface = list.at(i);
strTemp = strTemp + ("设备:") + interface.name() + "\n";
strTemp = strTemp + ("硬件地址:") + interface.hardwareAddress() + "\n";
QList<QNetworkAddressEntry> elist = interface.addressEntries();
for (int j = 0; j < elist.count(); j++) {
QNetworkAddressEntry es = elist.at(j);
strTemp = strTemp + "\t" + ("IP地址:") + es.ip().toString() + "\n";
strTemp = strTemp + "\t" + ("子网掩码:") + es.netmask().toString() + "\n";
strTemp = strTemp + "\t" + ("广播地址:") + es.broadcast().toString() + "\n";
}
}
QMessageBox::information(this, "本机网络信息", strTemp);
}

浙公网安备 33010602011771号