Сохранить QList <int> в QSettings
Я хочу сохранить 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, но потом он падает при удалении указателя.
Ответы
Ответ 1
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;
}
Ответ 2
Возможно, вам придется зарегистрировать QList в качестве своего мета-типа, чтобы он работал. Это хорошая отправная точка для чтения мета-типов в Qt: http://qt.nokia.com/doc/4.6/qmetatype.html#details.