Qt获取IP地址,子网掩码,网关地址

Qt获取操作系统网络信息挺尴尬的,使用自带的QNetworkInterface不光层级众多,而且很难获取Gateway网关,网上有使用第三方库IPHlpApi获取网关的方法,无疑又会增加复杂度。
这里简单的使用cmd命令+正则匹配来获取,利用Windows提供的ipconfig或者Linux提供的ifconfig等命令迅速获取相关信息:

QString Utils::GetIP(){
    QString ip = "";
    QProcess cmd_pro ;
    QString cmd_str = QString("ipconfig");
    cmd_pro.start("cmd.exe", QStringList() << "/c" << cmd_str);
    cmd_pro.waitForStarted();
    cmd_pro.waitForFinished();
    QString result = cmd_pro.readAll();
    QString pattern("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
    QRegExp rx(pattern);

    int pos = 0, count = 0;
    while((pos = rx.indexIn(result, pos)) != -1){
        ip += rx.cap(0) + ",";
        count++;
        if(count == 3)
            break;
        pos += rx.matchedLength();
    }
    return ip;
}

Qt5中读写配置文件

Qt中可以使用QSettings来进行简单的.ini配置文件的读写。

/* 初始化ini配置文件 */
QSettings configFile = new QSettings(QString("%1/app/app.ini").arg(QApplication::applicationDirPath()) ,QSettings::IniFormat);
configFile.setIniCodec(QTextCodec::codecForName("UTF-8"));

/* write */
configFile.beginGroup("PMC");

configFile.setValue("spindleKnifeNum", "BD0");
configFile.setValue("boxKnifeNum", "BR722");
configFile.endGroup();

/* read */
configFile.value("PMC/spindleKnifeNum",tr("")).toString();

要注意,以上代码,在第一阶段初始化配置文件过后,所有配置项已经在内存中了,下面的读取功能并不是实时计算的,实际上实时读取也是一件低效率的事情。

Qt5中使用JSON

Qt中将数据以JSON格式输出是非常愉快的:

QJsonObject obj;
obj.insert("numValue", 8);
obj.insert("strValue", "hello world");
qDebug() << obj;

QJsonDocument doc(obj);
qDebug(QString(doc.toJson(QJsonDocument::Compact)));

以及数组:

QJsonArray array;
for(int i = 0; i < no; i++){
    QJsonObject obj;
    obj.insert("id", alarms[i].alm_no);
    obj.insert("title", Utils::GBK2UTF(alarms[i].alm_msg));
    array.push_back(obj);
}
QJsonDocument doc(array);
return QString(doc.toJson(QJsonDocument::Compact));

虽说没有JAVA中的GSON框架之类的可以直接将Object转成JSON那么方便,但也简单实用,秉承Qt一贯的思维,突然想起上一篇利用回调函数实现Qt日志框架的文章,貌似这种思想在Qt里面是一脉相承的。

丁丁生于 1987.07.01 ,30岁,英文ID:newflydd

  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • Git OSChina 上积极参与开源社区