我的项目是模拟诸如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 .
任何建议将不胜感激!
答案 0 :(得分:1)
QSettings::setValue()需要一个QVariant参数。因此,您必须将QList
转换为QVariant
或QVariantList
。
请参阅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;
}
}