QT realiza el asistente de depuración del puerto serie (5): acceso al archivo ini a la información del puerto serie

Código fuente del proyecto: https://github.com/zhangfls/QT_UartAnalysisTool

 

Anterior:

QSS set theme, add shortcut command list

 

Generalmente, la herramienta de depuración del puerto serie necesita guardar la información básica, para que la configuración anterior se pueda cargar después de la reapertura.Aquí usamos el archivo ini para leer y guardar los parámetros del puerto serie.

Uno, crea un archivo ini

Agregue un archivo con el sufijo ini a un directorio (preferiblemente el directorio raíz del programa), como param.ini

Dos, formato de archivo ini

El formato de archivo ini general es similar a la siguiente figura

1. [] Los corchetes se pueden configurar con una categoría y los atributos se pueden configurar en la categoría

2. El valor de la izquierda del atributo es el nombre del atributo y el valor de la derecha es el valor del atributo.

Tres, leer y escribir archivos ini

1. Agregue archivos de encabezado

#include <QSettings>

2. Abra el archivo ini y configure el formato de lectura del archivo.

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

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

    if(configIni == NULL)
        return false;

3. Leer el valor del atributo

Como leer la velocidad en baudios

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

Puede ver que el parámetro de entrada de la función de valor es una cadena. Separe la categoría del nombre del atributo con una barra. Si desea consultar el valor del atributo BaudRate en uartParam, al igual que el código anterior

4. Escriba el valor del atributo

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

Similar a la lectura, se llama setValue.

5. Cabe señalar que cuando esta categoría o atributo no existe, el valor leído está vacío. Al escribir un atributo de clasificación que no existe en el archivo, el atributo y el valor correspondientes se crearán directamente.

 

En cuarto lugar, tenga en cuenta que el atributo del puerto serie lee y guarda

1. Cree un pulsador y su función de ranura de clic para guardar los parámetros

2. Lea el archivo ini cuando se inicialice la interfaz y configure los parámetros del puerto serie

//根据配置文件初始化参数
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. Cuando se hace clic en el botón Guardar configuración, se almacena la configuración actual del puerto serie.

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. Hay varios puntos que vale la pena señalar:

(1) La ruta absoluta se usa aquí para el archivo de configuración. En el uso real, es mejor usar una ruta relativa. Solo quiero depurarlo.

(2) El formato del archivo es muy importante, especialmente cuando se trata de leer caracteres chinos, es mejor usar UTF-8.

(3) Cuando el comobox se establece en un valor que no se incluyó originalmente, no tendrá efecto, pero se configurará automáticamente con el primer valor original.

(4) QT creará directamente los atributos y valores correspondientes al escribir atributos de clasificación que no existen en el archivo, por lo que no es necesario que comience a escribir un archivo ini, solo use un archivo vacío. Después de iniciar el programa, haga clic en Haga clic en el botón Guardar atributo que hicimos y el archivo se completará automáticamente.

 

Cinco, lista de comandos de acceso directo

La lista de comandos de acceso directo debe poder guardarse, de lo contrario es de muy mal gusto. Con una ligera modificación de la misma manera, se puede guardar la lista de comandos.

Inicialice la lista de comandos de lectura:

    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());
                    }
                    );
    }

El botón de guardar parámetro se agrega en el evento de clic:

    //命令面板相关
    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());
    }

Esto guardará los parámetros del panel de comando.

Siguiente:
Diseño de la página de configuración de QT
 

 

Supongo que te gusta

Origin blog.csdn.net/zhangfls/article/details/111310895
Recomendado
Clasificación