4

该类包含以下内容:

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)));
4

4 回答 4

2

只需使用此构造函数:

QVariant::QVariant(const QList & val)

构造一个具有列表值 val 的新变体。

即,当将 QList 存储为 QVariant 时,QList 的模板类型必须是适合 QVariant 的类型。没有其他构造函数或转换方法。

你应该这样写:

QVariant variant(
    QList<double>::fromVector(QVector<double>::fromStdVector(data->switch2))
);

setSwitchVariant(variant);
于 2014-01-06T06:07:44.980 回答
1

如果不需要构造函数:

QList<QUrl> params;
QVariant varParams;
varParams.setValue<QList<QUrl>>( params );
于 2014-09-19T13:33:37.897 回答
1

我知道这与作者无关。但也许有人会派上用场。

qRegisterMetaTypeStreamOperators<QList<double>>("Stuff");
QList<double> lst;
// convert
QVariant varLst = QVariant::fromValue(lst);
// back
lst = varLst.value<QList<double>>();
于 2019-09-02T05:45:14.663 回答
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;
}
于 2020-04-27T22:30:52.773 回答