该课程包含:
Q_PROPERTY(QList<double> switch1 READ switch1 WRITE setSwitch1 NOTIFY switch1Changed)
void setSwitch2(QList<double> arg)
{
if (m_switch2 != arg)
{
m_switch2 = arg;
emit switch2Changed(arg);
}
}
以下作品:
setSwitch2(QList<double>::fromVector(QVector<double>::fromStdVector(data->switch2)));
但现在我的数据类型为QVariantList
而不是QList<double>
。
我现在应该如何用QVariant替换QList?
这不起作用:
setSwitch1(QVariantList::fromVector(QVector<QVariant>::fromStdVector(data->switch1)));
答案 0 :(得分:3)
只需使用此构造函数:
QVariant::QVariant(const QList & val)
构造一个带有列表值的新变体val。
即。当将QList存储为QVariant时,QList的模板类型必须是QVariant可以使用的类型。没有其他构造函数或转换方法。
你应该这样写:
QVariant variant(
QList<double>::fromVector(QVector<double>::fromStdVector(data->switch2))
);
setSwitchVariant(variant);
答案 1 :(得分:0)
如果不需要构造函数:
QList<QUrl> params;
QVariant varParams;
varParams.setValue<QList<QUrl>>( params );
答案 2 :(得分:0)
我了解这与作者无关。但是也许有人会派上用场。
qRegisterMetaTypeStreamOperators<QList<double>>("Stuff");
QList<double> lst;
// convert
QVariant varLst = QVariant::fromValue(lst);
// back
lst = varLst.value<QList<double>>();
答案 3 :(得分:0)
列表有QVariant构造函数:QVariant(const QList&list) 和typedef QVariantList。两者都在一个不错的模板中:
template <class T> static QVariant toVariant(const QList<T> &list)
{
QVariantList variantList;
variantList.reserve(list.size());
for (const auto& v : list)
{
variantList.append(v);
}
return variantList;
}