Windows 使用QT读取IP地址并修改IP地址_qtchar 赋值ip-程序员宅基地

技术标签: QT  IP地址  Windows  

读取Windows的IP地址有三种方法:

  1. QT的QNetworkInterface   
  2. IPHlpApi
  3. QT的QSettings读注册表

修改windows的IP地址使用 netsh

netsh interface ipv4 set address name = "以太网" source = static address = 192.168.0.106 mask = 255.255.255.0 gateway = 192.168.0.1 

代码:

QT的QNetworkInterface   

void QtNetwork::initNetwork()
{
	ui.comboBox->clear();

	QString text;
	QTextStream out(&text);
	QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();
	for (int i = 0; i < ifaceList.count(); i++)
	{
		QNetworkInterface var = ifaceList.at(i);
		out << QString::fromLocal8Bit("########## 设备%1 ############").arg(i) << endl;
		out << QString::fromLocal8Bit("接口名称:") << var.humanReadableName() << endl;
		out << QString::fromLocal8Bit("设备名称:") << var.name() << endl;
		out << QString::fromLocal8Bit("硬件地址:") << var.hardwareAddress() << endl;

		ui.comboBox->addItem(var.name());

		out << QString::fromLocal8Bit("IP地址列表:") << endl;
		// 读取一个IP地址的关联信息列表
		QList<QNetworkAddressEntry> entryList = var.addressEntries();
		for(int j = 0; j < entryList.count(); j++)
		{
			QNetworkAddressEntry entry = entryList.at(j);
			out << QString::fromLocal8Bit("%1_地址:").arg(j) << endl;
			out << QString::fromLocal8Bit(" IP地址:") << entry.ip().toString() << endl;
			out << QString::fromLocal8Bit(" 子网掩码:") << entry.netmask().toString() << endl;
			out << QString::fromLocal8Bit(" 广播地址:") << entry.broadcast().toString() << endl;
		}
	}

	ui.textEdit->setPlainText(text);
}
IPHlpApi
void QtNetwork::initNetwork_IPHlpApi()
{
	QString text;
	QTextStream out(&text);

	//IP_ADAPTER_INFO结构体
	PIP_ADAPTER_INFO pIpAdapterInfo = NULL;
	pIpAdapterInfo = new IP_ADAPTER_INFO;

	//结构体大小
	unsigned long ulSize = sizeof(IP_ADAPTER_INFO);

	//获取适配器信息
	int nRet = GetAdaptersInfo(pIpAdapterInfo, &ulSize);

	if (ERROR_BUFFER_OVERFLOW == nRet)
	{
		//空间不足,删除之前分配的空间
		delete[]pIpAdapterInfo;

		//重新分配大小
		pIpAdapterInfo = (PIP_ADAPTER_INFO) new BYTE[ulSize];

		//获取适配器信息
		nRet = GetAdaptersInfo(pIpAdapterInfo, &ulSize);

		//获取失败
		if (ERROR_SUCCESS != nRet)
		{
			if (pIpAdapterInfo != NULL)
			{
				delete[]pIpAdapterInfo;
			}
			return;
		}
	}

	//MAC 地址信息
	char szMacAddr[20];
	//赋值指针
	PIP_ADAPTER_INFO pIterater = pIpAdapterInfo;
	int i = 0;
	while (pIterater)
	{
		out << QString::fromLocal8Bit("########## 设备%1 ############").arg(i) << endl;
		out << QString::fromLocal8Bit("网卡名称:") << pIterater->AdapterName << endl;
		out << QString::fromLocal8Bit("网卡描述:") << pIterater->Description << endl;

		sprintf_s(szMacAddr, 20, "%02X-%02X-%02X-%02X-%02X-%02X",
			pIterater->Address[0],
			pIterater->Address[1],
			pIterater->Address[2],
			pIterater->Address[3],
			pIterater->Address[4],
			pIterater->Address[5]);

		out << QString::fromLocal8Bit("MAC 地址:") << szMacAddr << endl;

		out << QString::fromLocal8Bit("IP地址列表:") << endl;

		//指向IP地址列表
		int j = 0;
		PIP_ADDR_STRING pIpAddr = &pIterater->IpAddressList;
		while (pIpAddr)
		{
			out << QString::fromLocal8Bit("%1_地址:").arg(j) << endl;
			out << QString::fromLocal8Bit(" IP地址:") << pIpAddr->IpAddress.String << endl;
			out << QString::fromLocal8Bit(" 子网掩码:") << pIpAddr->IpMask.String << endl;

			//指向网关列表
			PIP_ADDR_STRING pGateAwayList = &pIterater->GatewayList;
			while (pGateAwayList)
			{
				out << QString::fromLocal8Bit(" 网关:") << pGateAwayList->IpAddress.String << endl;

				pGateAwayList = pGateAwayList->Next;
			}

			pIpAddr = pIpAddr->Next;
			j++;
		}

		pIterater = pIterater->Next;
		i++;
	}

	//清理
	if (pIpAdapterInfo)
	{
		delete[]pIpAdapterInfo;
	}

	ui.textEdit_2->setPlainText(text);
}
QT的QSettings读注册表
void QtNetwork::initNetwork_reg()
{
	QString text;
	QTextStream out(&text);

	QSettings reg("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces\\", QSettings::NativeFormat);
	QStringList groupsList = reg.childGroups();
	qDebug() << "read size:" << groupsList.size();

	int i = 0;
	foreach(QString group, groupsList)
	{
		out << QString::fromLocal8Bit("########## 设备%1 ############").arg(i) << endl;
		out << QString::fromLocal8Bit("设备名称:") << group << endl;

		reg.beginGroup(group);

		QString ip = reg.value("IPAddress").toString();
		if (!ip.isEmpty())
		{
			out << QString::fromLocal8Bit(" IP地址:") << ip << endl;
		}

		QString netmask = reg.value("SubnetMask").toString();
		if (!netmask.isEmpty())
		{
			out << QString::fromLocal8Bit(" 子网掩码:") << netmask << endl;
		}

		QString gateway = reg.value("DefaultGateway").toString();
		if (!gateway.isEmpty())
		{
			out << QString::fromLocal8Bit(" 网关:") << gateway << endl;
		}

		reg.endGroup();
		i++;
	}

	ui.textEdit_3->setPlainText(text);
}

修改IP地址

void QtNetworkEditDlg::on_pushButton_ok_clicked()
{
	QString name = m_interface.humanReadableName();
	QString ip = ui.lineEdit_ip->text();
	QString netmask = ui.lineEdit_netmask->text();

	QProcess cmd(this);

	// netsh interface ipv4 set address name = "以太网" source = static 
	// address = 192.168.0.106 mask = 255.255.255.0 gateway = 192.168.0.1 gwmetric = 0
	QString command = "netsh interface ipv4 set address name = "
		+ name + " source = static address = " + ip
		+ " mask = " + netmask;
	cmd.start(command);
	cmd.waitForFinished();

	accept();
}

截图


程序下载连接: https://download.csdn.net/download/xiao503/10403325
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiao503/article/details/80254981

智能推荐

C++程序打包_c++打包-程序员宅基地

文章浏览阅读1.9k次。首先我用的vs2017对现有的项目进行打包处理,当然首先的有打包的工具就是下图的这个vs小工具,找不到的话可以在工具中打开扩展与更新,在里面查找相应的工具名之后就是在项目上新建一个setup项目,前提是你已经安装了上面的那个小工具,之后就是对项目进行添加要输出的项目,设为主输出,然后再第二个文件上进行存放该项目的快捷方式,这个是在桌面的上的,而第三个文件夹是在开始菜单栏里添加的在其中加入所需要的依赖以及项目再进行生成就会出现项目的安装的exe文件在你生成的项目下..._c++打包

输入打开文件-程序员宅基地

文章浏览阅读86次。import fnmatch, osimport reyy = input('')def edd(user_name): def allFiles(root, patterns = '*', single_level = False, yield_folders = False): patterns = patterns.split(';') ..._输打开

Eplan教学视频合集-百度网盘-收集于网络_eplan教程 百度网盘-程序员宅基地

文章浏览阅读9.4k次,点赞5次,收藏18次。Eplan教学视频合集-百度网盘-收集于网络https://yun.baidu.com/s/1djYbk#list/path=%2Fhttps://pan.baidu.com/s/14DHLr31mLq2N8qbxd7vcbw //code:cva8https://yun.baidu.com/s/1qYfdJLM#list/path=%2Fhttps://yun.baidu.co..._eplan教程 百度网盘

keep-alive vue不起作用的原因_vue3+vite的keep-alive浏览器返回不生效-程序员宅基地

文章浏览阅读2w次。keep-alive 从列表页进入到详情页,再回到列表页,然后页面又重新请求,而不是直接读缓存里面的(ps:之前keep-alive用在项目中是可以起作用的,但是不知道为什么这两天就出现了这样的问题。就连activated,deactivated这两个钩子函数也是没有触发到) 具体代码如下 我尝试在项目中新建一个很简单的页面,也是没有效果。一开始以为是vue的版本过低导致的,看了一下v..._vue3+vite的keep-alive浏览器返回不生效

十进制小数部分如何转化成二进制算法实现_小数进制转换编程-程序员宅基地

文章浏览阅读483次。十进制小数转化成二进制,就是不断地乘二,判断之后的这个数是否比1大,比1大则输出输出1,留下小数部分继续前面的操作。将3.75的小数部分转化为二进制。最后的输出结果是.11。_小数进制转换编程

免费OFD文件在线转PDF_在线生成一个 ofd文件-程序员宅基地

文章浏览阅读739次。ofd文件打不开?ofd怎么转换为pdf?本文将给告诉大家ofd是什么文件格式?ofd怎么打开?ofd怎么免费转换为配pdf文件等,以下是具体的方法:一,什么是OFD文件?OFD是我国电子公文交换和存储格式标准。OFD格式是我国自主可控的电子文件版式文档格式。OFD版式文件,版面固定、不跑版、所见即所得,可以视为计算机时代的“数字纸张”;是电子文档发布、数字化信息传播和存档的理想文档格式。OFD格式是当下对于全国产环境具有明显的优势。因此,在自主可控档案系统中,OFD格式无疑是自主可控档案系.._在线生成一个 ofd文件

随便推点

Vue.js复习_下列代码中,应用v-for指令遍历数组items-程序员宅基地

文章浏览阅读380次。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载等⼀系列过程,称这是Vue的⽣命周期。_下列代码中,应用v-for指令遍历数组items

删除安装Google Chrome浏览器时捆绑安装的Google 文档、表格、幻灯片、Gmail、Google 云端硬盘、YouTube网址链接(Mac)_chrome自带的表格怎么删-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏2次。Mac mini操作系统,安装完 Google Chrome 浏览器以后,单击 启动台 桌面左下角的“显示应用程序”,我们发现捆绑安装了。进入目录 /Users/用户名/Applications/Chrome 应用。那如何删除这些网址连接呢?,一个个单击打开,发现都是网址链接。已删除,干干净净,启动台回来了。进入或者删除整个文件夹。_chrome自带的表格怎么删

基于Java+SpringBoot+vue+elementui图书商城系统设计实现_图书商城后台管理系统设计与实现-程序员宅基地

文章浏览阅读3.9w次,点赞153次,收藏430次。主要功能包括管理员:首页、个人中心、图书分类管理、回收类别管理、新书榜管理、特价区管理、旧书回收管理、用户管理、订单评价管理、回收预约管理、图书回收管理、管理员管理、系统管理、订单管理。前台使用:首页、新书榜、特价区、旧书回收、公告资讯、个人中心、后台管理、购物车、客服。用户:首页、个人中心、订单评价管理、回收预约管理、图书回收管理、我的收藏管理、订单管理等功能。_图书商城后台管理系统设计与实现

【JZ2440笔记】裸机实验使用SDRAM_京累里101123-程序员宅基地

文章浏览阅读393次。S3C2440A 存储器控制器为访问外部存储的需要器提供了存储器控制信号。S3C2440A 包含以下特性:–大/小端(通过软件选择)–地址空间:每个 Bank 有 128M 字节(总共 1G/8 个 Bank)–大/小端(通过软件选择)–除了 BANK0(16/32 位)之外,其它全部 BANK 都可编程访问宽度(8/16/32 位)–总共 8 个存储器 Bank6 个存储器 Bank 为 ROM,SRAM 等其余 2 个存储器 Bank 为 ROM,SRAM,SDRAM 等–7 个固定的_京累里101123

工具系列:TensorFlow决策森林_(3)使用dtreeviz可视化-程序员宅基地

文章浏览阅读1.2k次,点赞19次,收藏19次。之前的教程演示了如何使用TensorFlow的决策森林(随机森林、梯度提升树和CART)分类器和回归器来准备数据、训练和评估。(我们将TensorFlow决策森林缩写为TF-DF。)您还学会了如何使用内置的函数可视化树,并显示特征重要性度量。本教程的目标是通过可视化更深入地解释分类器和回归器决策树。我们将查看详细的树结构图示,以及决策树如何划分特征空间以做出决策的描绘。树结构图帮助我们理解模型的行为,特征空间图帮助我们通过展示特征和目标变量之间的关系来理解数据。我们将使用的可视化库称为dtreeviz。_dtreeviz

MySQL8.0学习记录10 - 字符集与校对规则_mysql8.0存储系统元数据的字符集是-程序员宅基地

文章浏览阅读2.1k次。MySQL8.0字符集_mysql8.0存储系统元数据的字符集是