Сохранить QList <int>в QSettings - PullRequest
13 голосов
/ 16 марта 2010

Я хочу сохранить 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, но затем он удаляется при удалении указателя ..

Ответы [ 2 ]

19 голосов
/ 16 марта 2010

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;
}
1 голос
/ 16 марта 2010

Вам может потребоваться зарегистрировать QList как собственный мета-тип, чтобы он работал.Это хорошая отправная точка для чтения мета-типов в Qt: http://qt.nokia.com/doc/4.6/qmetatype.html#details.

...