最近在摸索如何獲取和修改IP
這是第一種方式
//讀取部分
QSettings *ConfigIni = new QSettings("/etc/eth0-setting",QSettings::IniFormat,0);
ui->ipInfoLineEdit->setText(ConfigIni->value("IP").toString());//IP地址
ui->maskInfoLineEdit->setText(ConfigIni->value("Mask").toString()); //子網掩碼
ui->gatewayInfoLineEdit->setText(ConfigIni->value("Gateway").toString());//子網掩碼
ui->dnsInfoLineEdit->setText(ConfigIni->value("DNS").toString());//DNS
ui->macInfoLineEdit->setText(ConfigIni->value("MAC").toString());//mac
//修改部分
void ipset::ipconfig_set_infile()
{
//刪除原有配置文件
QDir rmfile;
rmfile.remove("/etc/eth0-setting");//WINDOWS下就可以不用這兩句
QSettings *ipConfigIni = new QSettings("/etc/eth0-setting",QSettings::IniFormat,0);
ipConfigIni->setIniCodec("UTF-8"); //設置文件格式爲UTF-8
ipConfigIni->setValue("IP",ui->ipInfoLineEdit->text());//寫入配置文件中Ip配置參數
ipConfigIni->setValue("Mask",ui->maskInfoLineEdit->text());//寫入配置文件中Mask配置參數
ipConfigIni->setValue("Gateway",ui->gatewayInfoLineEdit->text());//寫入配置文件中Gateway配置參數
ipConfigIni->setValue("DNS",ui->dnsInfoLineEdit->text());
ipConfigIni->setValue("MAC",ui->macInfoLineEdit->text());
}
函數時用Qt下的QSttings。相關內容大家自己看
需要注意的是在linux下,覆蓋不了原文件,需要調用QDir::remove函數,先刪除再生成。
WINDOWS下就直接覆蓋的。
第二種方法是採用QT自帶的函數QList<QNetworkInterface
用這個類可以獲取系統底層的網絡參數,經過實踐是可行的,我參考的文章:http://qt.csdn.net/articles.aspx?pointid=489&pointid2=7
/*QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
//獲取所有網絡接口的列表
foreach(QNetworkInterface interface,list)
{ //遍歷每一個網絡接口
if(interface.name()=="eth0")//我的端口是eth0,你的需要根據自己的來判斷
{
qDebug() << "Device: "<<interface.name();
//設備名
qDebug() << "HardwareAddress: "<<interface.hardwareAddress();
//硬件地址
QList<QNetworkAddressEntry> entryList = interface.addressEntries();
//獲取IP地址條目列表,每個條目中包含一個IP地址,一個子網掩碼和一個廣播地址
foreach(QNetworkAddressEntry entry,entryList)
{//遍歷每一個IP地址條目
if( entry.ip().toString().size() < 16)//區分IPV6和IPV4
{
qDebug()<<"IP Address: "<<entry.ip().toString();
//IP地址
qDebug()<<"Netmask: " <<entry.netmask().toString();
//子網掩碼
qDebug()<<"Broadcast: "<<entry.broadcast().toString();
//廣播地址
ui->ipInfoLineEdit->setText(entry.ip().toString());
ui->maskInfoLineEdit->setText(entry.netmask().toString());
ui->gatewayInfoLineEdit->setText(entry.broadcast().toString());*/
上面這段是參考網上的代碼寫的,根據網卡數量需要,自己寫下判斷就行了。
主要是在紅色字體這些地方。自己根據需求來
這個是我的第一次總結。呵呵,支持下