目录
Qt:QMap数据到本地文件,使数据持久化 (**直接采用 流 方式存到文件)
Qt中如何将一个QMap对象转换成QList或者QString对象
--------------------------------------------------------------------
要点:
QSettings 不能正确读写 Linux的 *.esktop文件;
使用 QMap就可以了?
参考:
base64:64进制计数系统,和 二、十进制计数系统,是类似的概念。
QTextStream 类(文本流)和 QDataStream 类(数据流) https://blog.csdn.net/ken2232/article/details/132006250
=======================================
Qt:QMap数据到本地文件,使数据持久化 (**直接采用 文本流 方式存到文件)
1. 写数据到本地文件
//写数据到本地文件
QMap<QString,QString> mapData;
mapData.insert("Baidu","www.baidu.com");
mapData.insert("Apple","www.apple.com");
QMapIterator<QString, QString> i(mapData);
QFile file("data.log");
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream out(&file);
while ( i.hasNext())
{
i.next(); //首次运行,指向第一个最开始的位置?
out<<i.key()<<",";
out<<i.value()<<"\n";
}
file.close();
数据用逗号隔开,并且一行表示一个key-value
2.读取数据
QString key, value;
file.open(QIODevice::ReadOnly);
QTextStream in(&file); //用文件构造流
QString line = in.readLine(); //读取一行放到字符串里
QStringList strList = line.split(",");
if(strList.count() == 2)
{
key = strList.value(0);
value = strList.value(1);
qDebug()<<key<<","<<value;
}
while(!line.isNull()) //字符串有内容
{
line=in.readLine(); //循环读取下行
strList = line.split(",");
if(strList.count() == 2)
{
key = strList.value(0);
value = strList.value(1);
qDebug()<<key<<","<<value;
}
}
file.close();
————————————————
版权声明:本文为CSDN博主「Mr.codeee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wzz953200463/article/details/109228789
Qt中如何将一个QMap对象转换成QList或者QString对象
QMap和QList不是一个数据结构,QMap是红黑树,QList是链表,
你要转换的话,只能把 QMap的健值转换为 QList,或者把 QMap的内容值转换为QList 。
QMpa中
QList<Key> keys() const // 函数把QMap的键值转换为QList。
QList<T> values() const //函数把QMap的内容值转换为QList
你想转换为QString类对象,我想你应该改是想把QMap的键值提取出来,那你可以
QList<QString> keys = testMap.keys();
之后转换为一个QString可以这样:
QStringList strList(keys );
QString str= strList.join("");
https://bbs.csdn.net/topics/392020092
QSettings如何將QMap <QString,int>保存到配置文件中
在阅读Save QList<int> to QSettings后,我正在与QMap<QString,int>
一起做同样的事情。我想配置文件看起来像这样:QSettings如何将QMap <QString,int>保存到配置文件中
1111=1
2222=3
4444=0
但我发现了一个编译错误:
Q_DECLARE_METATYPE(QMap<QString,int>)
Warning C4002: too many actual parameters for macro 'Q_DECLARE_METATYPE'
ConfigSettings.h(5) : error C2976: 'QMap' : too few template arguments
A
回答
13
你得到该错误消息是由以下事实引起的预处理程序没有按不了解模板。所以它解析的是这个宏调用是否有两个参数 - QMap<QString
和int>
,这是没有意义的。
要保存所需数据,最好自己将其序列化为 QSettings
。事情是这样写:
settings.beginGroup("Whatever");
QMap<QString, int>::const_iterator i = map.constBegin();
while (i != map.constEnd()) {
settings.setValue(i.key(), i.value());
++i;
}
settings.endGroup();
要读取的设置,使用同样的方法与childKeys()
功能的帮助。
settings.beginGroup("Whatever");
QStringList keys = settings.childKeys();
foreach (QString key, keys) {
map[key] = settings.value(key).toInt();
}
settings.endGroup();
2011-07-31 09:26:14 Mat
4
就像Mat所说的,错误是由预处理器不理解模板造成的。但是,您可以通过简单的typedef轻松修复此问题。
typedef QMap<QString,int> QIntMap
Q_DECLARE_METATYPE(QIntMap)
2013-04-24 09:55:00 Aditya
+0
这似乎是更普遍的情况下,一个更好的答案,虽然我明白了为什么选择答案被选为QSettings的具体情况。 –
0
我明白接受的答案,但我认为最初的问题是如何存储QMap。它转移到如何使编译器行为。
QSettings mySettings...
QMapIterator it(myMap);
// iterate through the map to save the values in your chosen format
while(it.hasNext())
{
it.next();
mySettings.setValue(it.key(), it.value());
}
然而,如果你想保存这和一帮其他的设置或数据结构一起,你可以考虑使用“请将BeginGroup()”和“端基()”进行分组一堆不同的数据结构为一个文件。非常整洁和可读。
2017-03-27 12:47:14 guitarpicva
+0
尽管我们感谢您的回答,但如果它提供了其他答案的附加值,那将会更好。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果以前的答案对你有帮助,你应该投票,而不是重复相同的信息。 –
1
QSetting
接受QVariant
类型传递到setValue
方法,所以这意味着你可以直接存储QMap<QString, QVarint>
地图设置
// Store
QMap<QString, QVariant> storeMap;
QMapIterator it(myMap);
// iterate through the map to save the values in your chosen format
while(it.hasNext())
{
storeMap[it.key()] = QVariant(it.value());
it.next();
}
settings.setValue("myKey", storeMap);
..
// Read
QMap<QString, QVariant> readMap = settings.value("myKey").toMap();
QMapIterator it(readMap);
while(it.hasNext())
{
myMap[it.key()] = it.value().toInt();
it.next();
}
2017-03-30 13:18:24
相关问题
- 1. 将QList <int>保存到QSettings
- 2. Sort QMap <QString,int>
- 3. 如何在QMAP获得第二个值<QString的,QMAP <QString的,的QString>>
- 4. QMap <QString,QVector <QString>>访问QVector C++ Qt
- 5. 如何使用QSettings将QString添加到注册表中
- 6. C#将KeyCode保存到配置文件
- 7. 如何将配置保存到web.config文件中?
- 8. 如何加载和保存qsettings Qt中
- 9. 将文件路径存储到QString [Qt]
- 10. 如何将配置数据保存在文件中
- 11. 如何将AbstractTableModel保存到文件中?
- 12. 将用户配置文件映像保存到数据库中
- 13. Wix:将列表框中的值保存到配置文件
- 14. 如何正确使用QSettings
- 15. 如何更新codeigniter中的配置文件并保存配置文件
- 16. 如何将文件保存到组件
- 17. 如何将Matrix <float>保存到XML文件?
- 18. 示例使用QSettings保存QLineEdit文本
- 19. QSettings的值方法返回错误QString
- 20. 如何设置NServiceBus和Log4Net保存到文件(不包含配置文件)
- 21. 如何保存到外部配置文件
- 22. 将PDF保存到位置保存到文件夹
- 23. 将文件保存到网络位置
- 24. ReSharper - 将设置保存到文件
- 25. 如何将MATLAB类保存到文件
- 26. 如何将XML保存到文件
- 27. 如何将文件保存到iPhone上?
- 28. 如何将UIImage保存到文件?
- 29. 如何将矩阵保存到文件?
- 30. 如何将图片保存到文件?