2- 读取配置文件生成命令列表
实现思路:
第一步先实现QT文件读取功能,设计参数列表读取文件
使用c语言的文件读写,使用格式输入输出,方便存取数据
第二步读取配置文件生成命令列表
读取配置文件内容动态生成命令列表
第一步先实现QT文件读取功能,设计参数列表读取文件
因为逛了一圈Qfile, 感觉不熟悉,不太好实现格式输入输出,文件保存使用c语言实现。封装用c++.
My_config_file.h
#include "stdio.h"
#define FILENAME "config.txt"
#define FILETYPE_A "a+"
#define FILETYPE_W "w+"
#define FILETYPE_R "r+"
//按格式写
#define cprintf(fmt, ...) fprintf(config_file.get_cfp(), fmt, ##__VA_ARGS__)
//按格式读
#define cscanf(fmt, ...) fscanf(config_file.get_cfp(), fmt, ##__VA_ARGS__)
class my_config_file
{
public:
my_config_file();
FILE *fp=NULL;
//初始化
int cmd_config_init(char *filename,char *type);
//关闭
void cmd_config_close();
//是否到文件尾巴
int cfeof();
FILE *get_cfp();
};
extern my_config_file config_file;
#endif // MY_CONFIG_FILE_H
My_config_file.cpp
#include "my_config_file.h"
my_config_file config_file;
my_config_file::my_config_file()
{
}
//初始化
int my_config_file::cmd_config_init(char *filename,char *type)
{
if( (fp=fopen(filename, type)) == NULL )
{
printf("Fail to open file!\n");
return 0;
}
return 1;
}
//关闭
void my_config_file::cmd_config_close()
{
if(fp!=NULL)
fclose(fp);
}
FILE *my_config_file::get_cfp()
{
return fp;
}
//是否到文件尾巴
int my_config_file::cfeof()
{
if(fp==NULL)
return 1;
return feof(fp);
}
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMap>
#include <QString>
#include "QDebug"
#include <QFile>
#include <QTextStream>
#include "my_config_file.h"
//定义配置项
typedef struct
{
char name[100];
char comd[100];
}AT_CMD_S;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
printf("save...\n");
AT_CMD_S at_cmd1={0};
AT_CMD_S at_cmd2={0};
int n=10;
config_file.cmd_config_init(FILENAME,FILETYPE_W);
while(n--)
{
cprintf("%d %s %s\n",n,"AT","ST+CSQ?");
}
config_file.cmd_config_close();
printf("read...\n");
config_file.cmd_config_init(FILENAME,FILETYPE_R);
while( !config_file.cfeof() )
{
cscanf("%d %s %s\n",&n,at_cmd2.name,at_cmd2.comd);
printf("read n:%d :%s - %s\n",n,at_cmd2.name,at_cmd2.comd);
}
config_file.cmd_config_close();
}
MainWindow::~MainWindow()
{
delete ui;
}
效果:
第二步读取配置文件生成命令列表
有了上面的文件读取接口,实现动态生成命令列表就变得很简单了
我们重新封装一下第一讲实现列表的功能,传入两个字符给 按键 和 编辑框
void MainWindow::add_widget(QString name,QString comd)
{
//创建widget
my_widget *mwidget =new my_widget(this);
mwidget->Button->setText(name);
mwidget->ineEdit->setText(comd);
//把item添加到listWidget
ui->listWidget->addItem(mwidget->item);
//将item与widget联系
ui->listWidget->setItemWidget(mwidget->item, mwidget);
global::Mwidget_List.append(mwidget);
}
Mainwindow中直接读取文件并添加列表
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
AT_CMD_S at_cmd2={0};
printf("read...\n");
config_file.cmd_config_init(FILENAME,FILETYPE_R);
//读取文件
while( !config_file.cfeof() )
{
int n=0;
cscanf("%d %s %s\n",&n,at_cmd2.name,at_cmd2.comd);
//设置文本和按钮的文本
QString btn_str(at_cmd2.name);
QString edit_str(at_cmd2.comd);
//添加命令
add_widget(btn_str,edit_str);
}
config_file.cmd_config_close();
}
我们在配置文件中手动添加几条指令