gpt4 book ai didi

qt - 将 QList 保存到 QSettings

转载 作者:行者123 更新时间:2023-12-03 10:11:27 33 4
gpt4 key购买 nike

我想保存一个 QList<int>到我的 QSettings 而不循环遍历它。
我知道我可以使用 writeArray() 和一个循环来保存所有项目或将 QList 写入 QByteArray 并保存它,但是它在我的 INI 文件中不是人类可读的。

目前我正在使用以下内容来转换我的 QList<int>QList<QVariant> :

QList<QVariant> variantList;
//Temp is the QList<int>
for (int i = 0; i < temp.size(); i++)
variantList.append(temp.at(i));

并保存此 QList<Variant>在我的设置中,我使用以下代码:
QVariant list;
list.setValue(variantList);
//saveSession is my QSettings object
saveSession.setValue("MyList", list);

正如我所见,QList 已正确保存到我的 INI 文件中(我的整数的逗号分隔列表)
但该函数在退出时崩溃。
我已经尝试使用指向我的 QSettings 对象的指针,但是它在删除指针时崩溃了..

最佳答案

QSettings::setValue() 需要 QVariant 作为第二个参数。要将 QList 作为 QVariant 传递,您必须将其声明为 Qt meta type .这是演示如何将类型注册为元类型的代码片段:

#include <QCoreApplication>
#include <QDebug>
#include <QMetaType>
#include <QSettings>
#include <QVariant>

Q_DECLARE_METATYPE(QList<int>)

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

qRegisterMetaTypeStreamOperators<QList<int> >("QList<int>");

QList<int> myList;
myList.append(1);
myList.append(2);
myList.append(3);

QSettings settings("Moose Soft", "Facturo-Pro");
settings.setValue("foo", QVariant::fromValue(myList));
QList<int> myList2 = settings.value("foo").value<QList<int> >();
qDebug() << myList2;

return 0;
}

关于qt - 将 QList<int> 保存到 QSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2452893/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com