1. 程式人生 > 其它 >QT實現串列埠除錯助手(五):ini檔案存取串列埠資訊

QT實現串列埠除錯助手(五):ini檔案存取串列埠資訊

技術標籤:C++QT嵌入式qtc++嵌入式

上一篇:

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檔案,直接用一個空的檔案,啟動程式後,點一下我們做好的儲存屬性按鈕,檔案就自動填入了。

五、快捷命令列表

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