实现了一个QListWidget的用户交互功能,现在发现不能记录参数,想用ini和qsetting记录,但是感觉这个实现过程好像不是很对,希望指教
如:
用户可自定义添加删除 listwidget中的元素,并且点击保存之后,会保存元素至ini中,下次启动时自动加载,不用重复添加元素,
如:
元素QListWidget列表:
a
b
c
d
按键:添加 按键:删除(点击字符)
输入字符:用户下拉框选择给定字符
按我现在的想法是
在添加、删除的slot函数中加
slot添加(){
写入qlist
}
slot删除(){
删除qlist
}
保存/回车后写入ini
但是这样又会在应用启动时额外执行一次slot添加 函数,导致ini参数翻倍
要加一个判断是否第一次执行?
问:该设计逻辑上是否正确,是否有更好的写入方法
bool a = 0;
if (页面槽函数启动){a=1;}
slot添加(){
if(第一次){写入list}
}
slot删除(){
if(该参数存在){删除qlist元素}
}
用ini实现应该是可以的,但可能有个小问题,如果文件未成功保存,设置是否第一次的这个操作需要用到事务这个概念,否则可能一直读取不了ini
可以这样子,程序每次启动,读取ini文件数据到内存并显示到界面,此时,用户进行增删改查,只要是没保存,都不用对内存和文件的数据进行操作。只需要对界面增删改查。
当用户点击保存时,对比界面数据和一开始读入的文件数据,然后修改内存数据,再更新到文件。
我觉得你可以不使用setting来记录。setting只适合记录一些参数配置。这大数据的我建议你直接将其写入文件。下次启动到指定目录读取文件。然后进行写入到list中。删除声明的可以做右击菜单。这样会简单一些。
你应该先理清楚思路逻辑:
文件:ini格式文件
内存:数组或列表
界面:QListWidget
启动时,从文件加载到内存,遍历每一项数据,添加元素到界面
添加时,在内存增加一条数据,保存全部数据到文件,添加元素到界面
删除时,从界面删除该元素,从内存删除该数据,保存全部数据到文件
补充一种思路,也可以试试
程序每次启动,读取ini文件数据到内存并显示到界面,相当于界面初始化,此时,用户进行增删改查,只要是没保存,都不用对内存和文件的数据进行操作。只需要对界面增删改查。当用户点击保存时,对比界面数据和一开始读入的文件数据,然后修改内存数据,再更新到文件。
save()
和load()
,save()
函数的作用是把你需要保存的数据保持的文件(你可以用QSettings保存到ini文件,或保持到其他格式文件),load()
的作用是从你保存的文件读取数据并添加到QListWidget
中QListWidget
时,调用load()
函数QListWidget
被关闭/销毁之前,调用save()
函数QListWidget
内存里的数据操作,不操作文件