如何将 QMap 存储到 QSetting 变量中
How to store a QMap into a QSetting variable
我正在尝试使用QSettings在我的QT应用程序中保存一些设置。为此,我定义了一个类型:
typedef QMap
<
QString,
QMap<QString, QVariant>
>
QSession;
之后我已经注册了它
Q_DECLARE_METATYPE(QSession);
要创建一些条目并在运行时读取它们没有问题,但是我收到关闭应用程序时出现以下错误
QVariant::save: unable to save type 'QSession' (type id: 1067).
我的保存功能看起来像那样
void saveSession()
{
QSession session;
for(auto it = pool.begin(); it != pool.end(); ++it)
{
QString hash(toQString((*it).getHash()));
session[hash]["name"] = toQVariant(toQString((*it).getName()));
session[hash]["size"] = toQVariant((*it).getSize());
session[hash]["timeout"] = toQVariant((*it).getTimeout());
}
this->settings.setValue("session", QVariant::fromValue(session));
}
问题出在哪里?谢谢!
您必须为QSession
类型注册流运算符 - 请参阅 qRegisterMetaTypeStreamOperator。
QSettings可以序列化QVariants。由于您可以将QHash存储在QVariant中,因此我建议使用QHash而不是QMap。
http://doc.qt.io/qt-5/qvariant.html#QVariant-25 和 http://doc.qt.io/qt-5/qvariant.html#toHash
void saveSession()
{
QHash<QString,QVariant> session;
for(auto it = pool.begin(); it != pool.end(); ++it)
{
QString hash(toQString((*it).getHash()));
QHash<QString, QVariant> tmp;
tmp[ "name" ] = toQVariant(toQString((*it).getName()));
tmp[ "size" ] = toQVariant((*it).getSize());
tmp[ "timeout" ] = toQVariant((*it).getTimeout());
session.insert( hash, QVariant( tmp ) );
}
this->settings.setValue( "session", session );
}
这段代码未经测试,但我想它应该做你所期望的。要从 QSettings 对象中获取值,您可以执行
QHash<QString, QVariant> session = settings.value( "session" ).toHash();
for( ... )
{
QHash<QString,QVariant> data = iterator.value().toHash();
// do whatever you want with data[ "name" ] etc.
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 如何将 QMap 存储到 QSetting 变量中