工程源码:https://github.com/zhangfls/QT_UartAnalysisTool
上一篇:
一般串口调试工具需要保存基本信息,这样重新打开后可以继续加载之前的配置,这里我们使用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配置页面布局