QT实现串口调试助手(五):ini文件存取串口信息

工程源码:https://github.com/zhangfls/QT_UartAnalysisTool

上一篇:

QSS设置主题、添加快捷命令列表

一般串口调试工具需要保存基本信息,这样重新打开后可以继续加载之前的配置,这里我们使用ini文件来读取保存串口参数。

一、创建ini文件

在某个目录添加一个后缀为ini的文件(最好是程序根目录),比如名为param.ini

二、ini文件格式

一般ini文件格式是类似下图的

1、【】方括号可以配置一个分类,分类下可以配置属性

2、属性的左值为属性名,右值为属性值

三、读写ini文件

1、添加头文件

#include <QSettings>

2、打开ini文件,设置文件读取格式

    QSettings *configIni = new QSettings("/qss/param.ini", QSettings::IniFormat);

    configIni->setIniCodec("UTF-8");

    if(configIni == NULL)
        return false;

3、读取属性值

比如读取波特率

QString  baudRate = configIni->value("uartParam/BaudRate").toString();

可以看到value函数的入口参数是一个字符串,用斜杠将分类和属性名隔开,如果要查询uartParam下的BaudRate属性的值,就像上面的代码这样

4、写入属性值

configIni->setValue("uartParam/BaudRate",ui->rateBox->currentText());

和读取类似,调用的是setValue。

5、需要注意的是,当这个分类或者属性不存在的时候,读取到的值是空。对文件中不存在的分类属性写入时,则会直接创建相应的属性和值。

四、实现串口属性读取与保存

1、创建一个pushButton和它的click槽函数,用来保存参数

2、界面初始化时读取ini文件,配置串口参数

//根据配置文件初始化参数
void MainWindow::IniParamInit(void)
{
    QSettings *configIni = new QSettings("/qss/param.ini", QSettings::IniFormat);

    configIni->setIniCodec("UTF-8");

    if(configIni == NULL)
        return;

    //波特率
    QString  baudRate = configIni->value("uartParam/BaudRate").toString();
    ui->rateBox->setCurrentText(baudRate);

    //数据位
    QString  dataBit = configIni->value("uartParam/DataBit").toString();
    ui->dataBox->setCurrentText(dataBit);

    //奇偶校验位
    QString  parity = configIni->value("uartParam/Parity").toString();
    qDebug()<<"parity:"<<parity;
    ui->checkBox->setCurrentText(parity);

    //停止位
    QString  stopBit = configIni->value("uartParam/StopBit").toString();
    ui->stopBox->setCurrentText(stopBit);

    delete  configIni;
}

3、保存配置按钮被点击时,存储当前的串口配置

bool MainWindow::SaveUartParam(void)
{
    QSettings *configIni = new QSettings("/qss/param.ini", QSettings::IniFormat);

    configIni->setIniCodec("UTF-8");

    if(configIni == NULL)
        return false;

    //波特率
    configIni->setValue("uartParam/BaudRate",ui->rateBox->currentText());

    //数据位
    configIni->setValue("uartParam/DataBit",ui->dataBox->currentText());

    //奇偶校验位
    configIni->setValue("uartParam/Parity",ui->checkBox->currentText());

    //停止位
    configIni->setValue("uartParam/StopBit",ui->stopBox->currentText());

    delete  configIni;

    return true;
}

4、有几个值得注意的点:

(1)、配置文件这里用了绝对路径,实际使用最好还是用相对路径,我只是为了调试方便。

(2)、文件格式很重要,特别是涉及到汉字的读取,最好都用UTF-8。

(3)、当comobox被设置为原先并没有包含的值时,不会生效,而是会自动被配置为原先的第一个值。

(4)、因为对文件中不存在的分类属性写入时,QT会直接创建相应的属性和值,所以我们不需要开始先写一个ini文件,直接用一个空的文件,启动程序后,点一下我们做好的保存属性按钮,文件就自动填入了。

五、快捷命令列表

快捷命令列表肯定是要能保存的,不然很鸡肋。用相同的方式稍微改一下,就可以实现命令列表的保存了。

初始化读取命令列表处:

    for(int i=0;i<100;i++)
    {
        ui->tableWidget->insertRow(i);

        QCheckBox *box = new QCheckBox();
        ui->tableWidget->setCellWidget(i,0,box);

        QLineEdit *lineOne = new QLineEdit();
        if(configIni != NULL)
        {
            QString tempPara = "cmdParam/cmd";
            tempPara.append(QString::number(i));
            lineOne->setText(configIni->value(tempPara).toString());
        }
        ui->tableWidget->setCellWidget(i,1,lineOne);

        QPushButton *button = new QPushButton();
        button->setText("发送");
        ui->tableWidget->setCellWidget(i,2,button);
        connect(button,&QPushButton::clicked,
                    [=] ()
                    {
                        sendButtonClick(lineOne->text());
                    }
                    );
    }

保存参数按钮被点击事件处添加:

    //命令面板相关
    qint32 rowNum = ui->tableWidget->rowCount();
    for(int i =0;i<rowNum;i++)
    {
        auto cellWidget = (ui->tableWidget->cellWidget(i, 1));
        QLineEdit *lines =(QLineEdit*)cellWidget;
        QString cmdVal = "cmdParam/cmd";
        cmdVal.append(QString::number(i));
        configIni->setValue(cmdVal,lines->text());
    }

这样可以保存命令面板参数了

下一篇:
QT配置页面布局
 

猜你喜欢

转载自blog.csdn.net/zhangfls/article/details/111310895