代码之家  ›  专栏  ›  技术社区  ›  Tobias

将qlist<int>保存到qsettings

  •  13
  • Tobias  · 技术社区  · 16 年前

    我想救一个 QList<int> 给我的Qsettings而不是通过它。
    我知道我可以使用writearray()和循环来保存所有项,或者将qlist写入qbytearray并保存它,但是在我的in i文件中它是不可读的。

    目前,我正在使用以下内容来转换我的 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文件中(以逗号分隔的int列表)
    但函数在退出时崩溃。
    我已经尝试使用指向我的qsettings对象的指针,但是在删除指针时它崩溃了。

    2 回复  |  直到 10 年前
        1
  •  19
  •   sashoalm Yaser Kalali    10 年前

    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
  •  1
  •   e8johan    16 年前

    您可能必须将qlist注册为它自己的元类型,它才能工作。这是了解qt中元类型的良好起点: http://qt.nokia.com/doc/4.6/qmetatype.html#details .