将QList <int>保存到QSettings

Tob*_*ias 13 qt qlist

我想保存一个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));
Run Code Online (Sandbox Code Playgroud)

要将其保存QList<Variant>到我的设置,我使用以下代码:

QVariant list;
list.setValue(variantList);
//saveSession is my QSettings object
saveSession.setValue("MyList", list);
Run Code Online (Sandbox Code Playgroud)

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

cha*_*lup 19

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

#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;
}
Run Code Online (Sandbox Code Playgroud)