阅读Save QList<int>to后QSettings,我也想做同样的事QMap<QString,int>.我希望配置文件看起来像这样:
1111=1
2222=3
4444=0
Run Code Online (Sandbox Code Playgroud)
但是我收到了编译错误:
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
Run Code Online (Sandbox Code Playgroud)
Mat*_*Mat 14
您获得的错误消息是由预处理器不知道模板的事实引起的.因此它解析宏调用是否有两个参数 - 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();
Run Code Online (Sandbox Code Playgroud)
要阅读设置,请在childKeys()功能的帮助下使用相同的方法.
settings.beginGroup("Whatever");
QStringList keys = settings.childKeys();
foreach (QString key, keys) {
map[key] = settings.value(key).toInt();
}
settings.endGroup();
Run Code Online (Sandbox Code Playgroud)
就像Mat所说,错误是由预处理器不理解模板引起的.但是,您可以通过简单的typedef轻松解决此问题.
typedef QMap<QString,int> QIntMap
Q_DECLARE_METATYPE(QIntMap)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5466 次 |
| 最近记录: |