如何用QT讀寫IP。或者是獲取並修改IP。WINDOWS和LINUX下都試過可行

最近在摸索如何獲取和修改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());*/

 

上面這段是參考網上的代碼寫的,根據網卡數量需要,自己寫下判斷就行了。

主要是在紅色字體這些地方。自己根據需求來

這個是我的第一次總結。呵呵,支持下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章