先上界面图

能够实现:(1)获取网卡信息;(2)修改指定IP、子网掩码、默认网关、DNS

websetclient.cc

#include "websetclient.hpp"
#include <QGroupBox>
#include <QLabel>
#include <QFile>
#include <QNetworkInterface>
#include <QProcess>
#include <QMessageBox>
#include <stdio.h>
#include <windows.h>
#include <Iphlpapi.h>WebSetClient::WebSetClient(QWidget *parent): QMainWindow(parent)
{//布局initLayout();//连接信号connectSignals();//显示Ip网卡等信息showIP();showwNetMask();showGateWay();showDNS();
}void WebSetClient:: initLayout()
{QHBoxLayout *hbox1 = new QHBoxLayout;QLabel *titleLabel = new QLabel("网络设置");m_closebutton = new QPushButton;m_closebutton->setIcon(QIcon(":/image/close"));QWidget *widget1 = new QWidget;widget1->setLayout(hbox1);hbox1->addWidget(titleLabel);hbox1->addStretch();hbox1->addWidget(m_closebutton);QGroupBox *infoGroupBox = new QGroupBox;infoGroupBox->setTitle("配置信息");QVBoxLayout *vbox2 = new QVBoxLayout;infoGroupBox->setLayout(vbox2);//选择网卡+本地连接,hbox11QLabel *slctNetCard = new QLabel("选择网卡");m_NetCardComboBox = new QComboBox;QHBoxLayout *hbox11 = new QHBoxLayout;hbox11->addWidget(slctNetCard,1);hbox11->addWidget(m_NetCardComboBox,3);//ip地址设置,vbox12QGroupBox *ipGroupBox = new QGroupBox;ipGroupBox->setTitle("IP地址设置");QVBoxLayout *vbox12 = new QVBoxLayout;ipGroupBox->setLayout(vbox12);QHBoxLayout *hbox21 = new QHBoxLayout;QHBoxLayout *hbox22 = new QHBoxLayout;QHBoxLayout *hbox23 = new QHBoxLayout;QHBoxLayout *hbox24 = new QHBoxLayout;vbox12->addLayout(hbox21,1);vbox12->addLayout(hbox22,1);vbox12->addLayout(hbox23,1);vbox12->addLayout(hbox24,1);m_AutoIPRadioButton = new QRadioButton;m_AutoIPRadioButton->setText("自动获取IP地址");m_SpecifiedIPRadioButton = new QRadioButton;m_SpecifiedIPRadioButton->setText("使用指定IP地址");m_SpecifiedIPRadioButton->setChecked(true);hbox21->addWidget(m_AutoIPRadioButton);hbox21->addStretch(1);hbox21->addWidget(m_SpecifiedIPRadioButton);hbox21->addStretch(2);QLabel *ipLabel = new QLabel("  IP地址");ipLabel->setAlignment(Qt::AlignRight);m_IPLineedit = new IPControl;hbox22->addWidget(ipLabel,2);hbox22->addWidget(m_IPLineedit,4);hbox22->addStretch(2);QLabel *maskLabel = new QLabel("子网掩码");maskLabel->setAlignment(Qt::AlignRight);m_SubNetMaskLineedit = new IPControl;hbox23->addWidget(maskLabel,2);hbox23->addWidget(m_SubNetMaskLineedit,4);hbox23->addStretch(2);QLabel *gatewayLabel = new QLabel("默认网关");gatewayLabel->setAlignment(Qt::AlignRight);m_DefaultGatewayLineedit = new IPControl;hbox24->addWidget(gatewayLabel,2);hbox24->addWidget(m_DefaultGatewayLineedit,4);hbox24->addStretch(2);//dns服务器设置,vbox13QGroupBox *dnsGroupBox = new QGroupBox;dnsGroupBox->setTitle("DNS服务器设置");QVBoxLayout *vbox13 = new QVBoxLayout;dnsGroupBox->setLayout(vbox13);QHBoxLayout *hbox131 = new QHBoxLayout;QHBoxLayout *hbox132 = new QHBoxLayout;vbox13->addLayout(hbox131);vbox13->addLayout(hbox132);m_AutoDNSRadioButton = new QRadioButton;m_AutoDNSRadioButton->setText("自动获取DNS服务器");m_AutoDNSRadioButton->setEnabled(false);m_SpecifiedDNSRadioButton = new QRadioButton;m_SpecifiedDNSRadioButton->setText("使用指定DNS服务器");m_SpecifiedDNSRadioButton->setChecked(true);hbox131->addWidget(m_AutoDNSRadioButton);hbox131->addStretch(1);hbox131->addWidget(m_SpecifiedDNSRadioButton);hbox131->addStretch(2);QLabel *dnsLabel = new QLabel("DNS服务器");dnsLabel->setAlignment(Qt::AlignRight);m_DNSLineedit = new IPControl;hbox132->addWidget(dnsLabel,2);hbox132->addWidget(m_DNSLineedit,4);hbox132->addStretch(2);vbox2->addLayout(hbox11,1);vbox2->addWidget(ipGroupBox,4);vbox2->addWidget(dnsGroupBox,2);//应用,取消QHBoxLayout *hbox3 = new QHBoxLayout;QWidget *widget3 = new QWidget;widget3->setLayout(hbox3);m_ApplyButton = new QPushButton("应用设置");m_CancelButton = new QPushButton("取消");hbox3->addStretch();hbox3->addWidget(m_ApplyButton);hbox3->addWidget(m_CancelButton);//QVBoxLayout *mainLayout = new QVBoxLayout;mainLayout->addWidget(widget1);mainLayout->addWidget(infoGroupBox);mainLayout->addWidget(widget3);QWidget *widget = new QWidget;this->setCentralWidget(widget);widget->setLayout(mainLayout);//qss样式m_ApplyButton->setStyleSheet("QPushButton{background:#20B2AA;""color:white;}");m_CancelButton->setStyleSheet("QPushButton{background:#20B2AA;""color:white;}");widget1->setStyleSheet("QWidget{background-color:#00868B;}");widget3->setStyleSheet("QWidget{background-color:#00868B;}");titleLabel->setStyleSheet("QLabel{color:white;}");m_closebutton->setStyleSheet("QPushButton{background-color:#00868B;border:none;color:white;}");this->setWindowFlags(Qt::FramelessWindowHint);this->resize(450,400);
}void WebSetClient::connectSignals()
{connect(m_closebutton,SIGNAL(clicked(bool)),this,SLOT(close()));connect(m_CancelButton,SIGNAL(clicked(bool)),this,SLOT(close()));connect(m_AutoIPRadioButton,SIGNAL(clicked(bool)),this,SLOT(onAutoIPButtonclicked()));connect(m_SpecifiedIPRadioButton,SIGNAL(clicked(bool)),this,SLOT(onSpIpButtonclicked()));connect(m_AutoDNSRadioButton,SIGNAL(clicked(bool)),this,SLOT(onAutoDNSButtonclicked()));connect(m_SpecifiedDNSRadioButton,SIGNAL(clicked(bool)),this,SLOT(onSpDNSButtonclicked()));connect(m_ApplyButton,SIGNAL(clicked(bool)),this,SLOT(onApplyButtonclicked()));
}void WebSetClient::showIP()
{// 获取第一个本主机的IPv4地址QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();int nListSize = ipAddressesList.size();QString IP;for (int i = 0; i < nListSize; ++i){if (ipAddressesList.at(i) != QHostAddress::LocalHost &&ipAddressesList.at(i).toIPv4Address()) {IP = ipAddressesList.at(1).toString();m_IPLineedit->setText(IP);}}if (IP.isEmpty())m_IPLineedit->setText(QHostAddress(QHostAddress::LocalHost).toString());
}
void WebSetClient::showwNetMask(){//筛选可用的非环路接口QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();for (int i = 0; i < ifaceList.count(); i++){QNetworkInterface var = ifaceList.at(i);//获取子网掩码QList<QNetworkAddressEntry> entryList = var.addressEntries();foreach(QNetworkAddressEntry entry,entryList){m_SubNetMaskLineedit->setText(entry.netmask().toString());}if(var.isValid()&& !var.flags().testFlag(QNetworkInterface::IsLoopBack)&& var.flags().testFlag(QNetworkInterface::IsRunning)){m_NetCardComboBox->addItem(var.humanReadableName());}}
}
void WebSetClient::showGateWay(){PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();unsigned long stSize = sizeof(IP_ADAPTER_INFO);int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);if (ERROR_BUFFER_OVERFLOW == nRel){delete pIpAdapterInfo;pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];GetAdaptersInfo(pIpAdapterInfo,&stSize);}m_DefaultGatewayLineedit->setText(pIpAdapterInfo->GatewayList.IpAddress.String);
}
void WebSetClient::showDNS(){FIXED_INFO *FixedInfo = (FIXED_INFO *) GlobalAlloc(GPTR, sizeof(FIXED_INFO));unsigned long ulOutBufLen = sizeof(FIXED_INFO);GetNetworkParams(FixedInfo, &ulOutBufLen);m_DNSLineedit->setText(FixedInfo->DnsServerList.IpAddress.String);
}
WebSetClient::~WebSetClient()
{}
void WebSetClient::onAutoIPButtonclicked(){m_IPLineedit->setEnabled(false);m_SubNetMaskLineedit->setEnabled(false);m_DefaultGatewayLineedit->setEnabled(false);m_SpecifiedDNSRadioButton->setChecked(true);m_AutoDNSRadioButton->setEnabled(true);m_IPLineedit->setText(" . . . ");m_DefaultGatewayLineedit->setText(" . . . ");m_SubNetMaskLineedit->setText(" . . . ");
}
void WebSetClient::onSpIpButtonclicked(){m_IPLineedit->setEnabled(true);m_SubNetMaskLineedit->setEnabled(true);m_DefaultGatewayLineedit->setEnabled(true);m_SpecifiedDNSRadioButton->setChecked(true);m_AutoDNSRadioButton->setEnabled(false);
}
void WebSetClient::onAutoDNSButtonclicked(){m_DNSLineedit->setEnabled(false);m_DNSLineedit->setText(" . . . ");
}
void WebSetClient::onSpDNSButtonclicked(){m_DNSLineedit->setEnabled(true);
}
void WebSetClient::onApplyButtonclicked(){if(m_SpecifiedIPRadioButton->isChecked()){QString name = m_NetCardComboBox->currentText();QString ip = m_IPLineedit->text();QString netmask = m_SubNetMaskLineedit->text();QString gateway = m_DefaultGatewayLineedit->text();QString dns = m_DNSLineedit->text();QProcess p1(this);QProcess p2(this);QString ipmaskgateway = "netsh interface ip set address " + name + " static "+ ip + QString(" ") + netmask + QString(" ") + gateway + " 1";QString adddns = "netsh interface ip set dns " + name + " static " + dns;QStringList arguments1;QStringList arguments2;arguments1 << "/c" << ipmaskgateway;arguments2 << "/c" << adddns;p1.start("cmd",arguments1);p1.waitForFinished(3000);p2.start("cmd",arguments2);p2.waitForFinished(3000);QString strResult1 = QString::fromLocal8Bit(p1.readAllStandardOutput());QString strResult2 = QString::fromLocal8Bit(p2.readAllStandardOutput());QMessageBox msgBox(this);msgBox.setText("IP: "+ strResult1 + "DNS: "+ strResult2);msgBox.exec();}else if (m_AutoIPRadioButton->isChecked()){QMessageBox msg(this);msg.setText("暂不支持");msg.exec();}
}

main.cc

#include "websetclient.hpp"
#include <QApplication>
#include <QDir>
#include <QTextCodec>
#include <QCoreApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);QDir::setCurrent(QApplication::applicationDirPath());QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));//set QString codecWebSetClient w;w.show();return a.exec();
}

websetclient.hpp

#ifndef WEBSETCLIENT_HPP
#define WEBSETCLIENT_HPP#include <QMainWindow>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QRadioButton>
#include <QPushButton>
#include <QComboBox>
#include <QWidget>
#include "ipcontrol.hpp"
class WebSetClient : public QMainWindow
{Q_OBJECTpublic:WebSetClient(QWidget *parent = 0);~WebSetClient();private:void initLayout();void connectSignals();void showIP();void showGateWay();void showwNetMask();void showDNS();
private:IPControl *m_IPLineedit;IPControl *m_SubNetMaskLineedit;IPControl *m_DefaultGatewayLineedit;IPControl *m_DNSLineedit;QRadioButton *m_AutoIPRadioButton;QRadioButton *m_SpecifiedIPRadioButton;QRadioButton *m_AutoDNSRadioButton;QRadioButton *m_SpecifiedDNSRadioButton;QPushButton *m_ApplyButton;QPushButton *m_CancelButton;QComboBox *m_NetCardComboBox;QPushButton *m_closebutton;
public slots:void onAutoIPButtonclicked();void onSpIpButtonclicked();void onAutoDNSButtonclicked();void onSpDNSButtonclicked();void onApplyButtonclicked();
};#endif // WEBSETCLIENT_HPP

这里的IP编辑栏可以用lineedit来代替

QT 实现WINDOWS下网络设置功能(IP、子网掩码、网关、DNS)相关推荐

  1. Windows下网络数据报的监听和拦截技术

    Windows下网络数据报的监听和拦截技术是一个比较古老的话题,应用也很广泛,例如 防火墙等等.这篇小文只是对该技术的一个总结,没有新技术,高手免看:) 要监听和拦截Windows下的数据报,基本可以 ...

  2. wind10系统 DNS服务器怎么设置,Win10系统下设置固定IP地址和DNS的方法

    对于不少用户来说,使电脑连接网络不仅仅是简单的接入WiFi或插入网线那么简单,还涉及设置IP地址和DNS的环节.在最新的Win10系统上,要设置固定IP地址和DNS该如何操作呢? 操作步骤 第一步.按 ...

  3. windows 下ConEmu设置

    某搜索引擎 ------- 搜索到的网站 https://conemu.github.io/ 然后就等下载好了 现在开始安装. 到这里就安装完成了 下面开始设置 windows 下ConEmu设置 i ...

  4. Windows下查看域名解析的IP

    Windows下查看域名解析的IP Windows下查看域名解析的IP nslookup Windows下查看域名解析的IP nslookup 示例:nslookup www.baidu.com 结果 ...

  5. windows下mongodb设置用户名密码 用python连接

    windows下mongodb设置用户名密码&用python连接 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   环境: 主机:WIN10 ...

  6. windows 2000 安全策略设置,2003 IP安全设置

    黑客大多通过端口进行入侵,所以你的服务器只能开放你需要的端口,那么你需要哪些端口呢?以下是常用端口,你可根据需要取舍: 80为Web网站服务:21为FTP服务:25 为E-mail SMTP服务:11 ...

  7. Qt在Windows下的三种编程环境搭建

    未经验证,记录在此. 尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得 ...

  8. Ubuntu虚拟机使用桥接网络设置静态IP

    需求:在Windows下使用VMware安装Ubuntu18.04,需要为Ubuntu系统设置桥接网络,给系统一个静态IP,使得在不同网段下的两台笔记本的Ubuntu虚拟机实现互通. 遇到的问题: 1 ...

  9. QT在Windows下检测USB设备热拔插的思路

    一.问题描述: 使用QT开发视频会议时需要实现实时检测USB摄像头/麦克风拔插的功能,这里主要涉及到对一些Windows API的了解以及windows系统的设备管理识别不同种设备时的原理,在实现过程 ...

最新文章

  1. 博客园的“随笔、文章、新闻、日记有啥区别”
  2. 机器学习笔记(一)绪论
  3. [编程题] 迷路的牛牛
  4. 一文搞清楚 Spark shuffle 调优
  5. 他回国后对学生说,玩会这12个游戏就能掌握python基础,其实不难
  6. HDU 5914 Triangle 数学找规律
  7. 2021大二实训part01
  8. 21天Jenkins打卡Day12发布到测试服务器
  9. 不愧是我,短短10分钟就为公司省下了几万块 ( ー̀◡ー́ )
  10. 踩着七彩祥云来接你的人不一定是意中人,也可能是阿里云
  11. 计算机系统文字图片以啥子存在,电脑如何识别图片中文字的字体|电脑通过图片识别字体的方法...
  12. wmic卸载程序命令_使用WMIC命令行卸载软件
  13. 数据挖掘肿瘤预测_肿瘤分析数据挖掘及信息解读
  14. NVIDIA GPU显卡介绍
  15. 网络爬虫的“盗亦有道”
  16. Nexus7二代刷机直升android10
  17. switchyomega插件自动切换代理
  18. 【ManageEngine】终端管理系统,助力华盛证券数字化转型
  19. Windows Store协议(ms-windows-store)解析和使用
  20. 资源池实时信息监控视图-相关 GUC 参数

热门文章

  1. 360图片搜索API
  2. 3d album android下载,声影制作家3D-Album
  3. (LeetCode)Java 求解无重复字符的最长子串
  4. 366. 斐波纳契数列
  5. 倍福--威伦触摸屏通信IP设置
  6. [Unity3D] MoveTowards、Lerp、Slerp
  7. C语言switch 语句
  8. java短信模板设计,全网疯传
  9. Yotta企业云盘容量与安全兼得
  10. 下载百度排行榜音乐的程序(Perl)