2014-01-06 6 views
4

Класс содержит следующее:Преобразование QList в QVariant

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>.

Как заменить QList на QVariant сейчас?

Это не работает:

setSwitch1(QVariantList::fromVector(QVector<QVariant>::fromStdVector(data->switch1))); 
+0

Тела Вас вопрос не имеет смысла после прочтения названия. У него даже нет QVariant нигде. – lpapp

+0

У этого есть QVariantList. На самом деле, я хочу, чтобы массив C++ был доступен из QML, поэтому я хотел заменить QList на QVariant или QVariantList (какой из них работает) @LaszloPapp –

+0

На самом деле QList уже доступен из QML! – lpapp

ответ

3

Просто используйте этот конструктор:

QVariant::QVariant(const QList & val)

Создаёт новый вариант со значением списка, Вэл.

I.e. при сохранении QList в качестве QVariant тип шаблона QList должен быть типом, который подходит для QVariant. Для этого нет другого конструктора или метода преобразования.

Вы должны писать так:

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

setSwitchVariant(variant); 
+0

извините, не мог понять. Что мне следует заменить? –

+0

@ user462608: ваш код не отображает весь контекст, но это единственный способ преобразования. Я не уверен, что вы подразумеваете под словом «что я должен заменить?». – lpapp

+0

Да, по моей вине, теперь я добавил несколько подробностей, скажите, что вы должны добавить. –

0

Если нет необходимости конструктора:

QList<QUrl> params; 
QVariant varParams; 
varParams.setValue<QList<QUrl>>(params); 
Смежные вопросы