Qt:解析ini文件到表格

不熟悉Qt控件的看这篇文章传送门

ini配置文件

什么是.ini文件

ini文件简单的说就是配置文件,用来存储程序需要使用的配置信息,如mysql里面的ini文件

  • 语法规则
    INI文件由节、键、值组成。

    [section]
    参数(键=值) name=value
    注解
    注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

QSettings 类 — >操作ini

  • QSettings *config = new QSettings(iniPathString, QSettings::IniFormat);
  • setIniCodec
  • setValue
  • value
  • beginGroup
  • endGroup

读取ini文件到tabWidget控件

void Widget::on_pushButtonRead_clicked()
{
    // 导入ini文件
    QString iniPath;
    QFileInfo iniFileInfo;

    int currenRow;
    int currentColum;
    QString itemName;

    // ini文件路径
    iniPath = QDir::currentPath() + "/teacher.ini";

    iniFileInfo = QFileInfo(iniPath); // 查看file信息
    if(iniFileInfo.exists())
    {
        // 设置文件格式
        QSettings *config = new QSettings(iniPath,QSettings::IniFormat);
        // 设置编码方式 config->format();
        for(int i =0; i < 10; i++)
        {
            QString setcion = QString("teacher%1/").arg(i);
            if(config->value(setcion + "name").toString().isEmpty()){
                continue; // 如果使用for break
            }
            currenRow = i;
            // 添加行
            ui->tableWidget->insertRow(i);
            itemName = config->value(setcion + "name").toString(); // 通过key找value
            currentColum = 0;
            ui->tableWidget->setItem(currenRow,currentColum,new QTableWidgetItem(itemName));

            currentColum =1;
            itemName = config->value(setcion + "course").toString();
            ui->tableWidget->setItem(currenRow,currentColum,new QTableWidgetItem(itemName));

            currentColum =2;
            itemName = config->value(setcion + "time").toString();
            ui->tableWidget->setItem(currenRow,currentColum,new QTableWidgetItem(itemName));

            currentColum =3;
            itemName = config->value(setcion + "read").toString();
            ui->tableWidget->setItem(currenRow,currentColum,new QTableWidgetItem(itemName));
        }
        delete config;
    }
    else
    {
        QMessageBox::warning(this,"iniFile Not existe",
                             iniPath + " not exists");
    }

}

将tabWidget中数据按照ini格式写到指定文件内

void Widget::on_pushButtonWrite_clicked()
{
    QDir iniDir;
    QString iniPathString;
    QFileInfo iniFileInfo;
    iniDir = QDir::current();
    
    iniPathString = iniDir.absolutePath() + "/config" + "/teacher.ini";
    qDebug() << "iniPathString:" << iniPathString;
    iniFileInfo = QFileInfo(iniPathString);
    //如果没有文件 创建文件
    if(iniFileInfo.exists()) //如果ini文件存在
    {
        QSettings *config = new QSettings(iniPathString, QSettings::IniFormat);
        
        for(int i = 0; i < ui->tableWidget->rowCount(); i++)
        {
            QString section = QString("teacher%1/").arg(i);
            config->beginGroup(section);
            // key value
            config->setValue("name", ui->tableWidget->item(i, 0)->text());
            config->setValue("course", ui->tableWidget->item(i, 1)->text());
            config->setValue("time", ui->tableWidget->item(i, 2)->text());
            config->setValue("read", ui->tableWidget->item(i, 3)->text());
            config->endGroup();
        }
        delete config;
    }
    else
    { // 文件不存在会创建文件
        QFile file(iniFileInfo.filePath());
        if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
        {
            qDebug()<<file.errorString();
        }
        QSettings *config = new QSettings(iniPathString, QSettings::IniFormat);
        
        for(int i = 0; i < ui->tableWidget->rowCount(); i++)
        {
            QString section = QString("teacher%1/").arg(i);
            config->beginGroup(section);
            // key value
            config->setValue("name", ui->tableWidget->item(i, 0)->text());
            config->setValue("course", ui->tableWidget->item(i, 1)->text());
            config->setValue("time", ui->tableWidget->item(i, 2)->text());
            config->setValue("read", ui->tableWidget->item(i, 3)->text());
            config->endGroup();
        }
        delete config;
        file.close();
    }
}

需要设置tabWidget控件的列,不然数据无法显示

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

√沫影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值