如何在QT中使用QSettings保存自己的类的QList?

时间:2018-08-28 14:55:34

标签: qt

我的项目是模拟诸如PacketTracer之类的“创建newtorks”应用程序,并且我希望能够保存该项目的状态,因此在关闭并重新运行该应用程序之后,如果用户愿意,一切仍然存在。我使用过QSetting,其中有一个SaveSettings()和LoadSettings()(从按钮的单击的插槽调用)。我被困在这里: 我有一个名为switch_List的QList switch_class,我想这样做:在Save Settings()中:

   QSettings setting("myorganization","blabla");
   setting.setValue("list_of_switch_objects",switch_List);//cannot convert from 
   // QList<switch_list> to const QVariant .

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

QSettings::setValue()需要一个QVariant参数。因此,您必须将QList转换为QVariantQVariantList

请参阅this thread's接受的答案以寻求可能的解决方案:

template <typename T>
QVariantList toVariantList( const QList<T> &list )
{
    QVariantList newList;
    foreach( const T &item, list )
        newList << item;

    return newList;
}

或者,您可以找到some interesting code on Qt doc来帮助您进行转换:

QList<int> intList = {7, 11, 42};

QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
    QSequentialIterable iterable = variant.value<QSequentialIterable>();
    // Can use foreach:
    foreach (const QVariant &v, iterable) {
        qDebug() << v;
    }
    // Can use C++11 range-for:
    for (const QVariant &v : iterable) {
        qDebug() << v;
    }
    // Can use iterators:
    QSequentialIterable::const_iterator it = iterable.begin();
    const QSequentialIterable::const_iterator end = iterable.end();
    for ( ; it != end; ++it) {
        qDebug() << *it;
    }
}