Russian Qt Forum

Qt => Qt Quick => Тема начата: virtual_root от Ноябрь 01, 2012, 12:18



Название: как из qml передать массив в c++ ?
Отправлено: virtual_root от Ноябрь 01, 2012, 12:18
Добрый день ребята. Подскажите пожалуйста, как можно из функции javascript, которая описана в файле qml передать двумерный массив в функцию c++ ?
Приведу свой код:
код из файла qml
Код
Javascript
           function get(){
               var groups = new Array();
               for (var i = 0; i<areaGroup.children.length; i++){
                   if (children[i].get())
                       groups[i] = children[i].get();
 
               }
               window.Get(groups);
           }
 
код из файла c++
Код
C++ (Qt)
void SettingsNotification::Get(QVariant map)
{
   qDebug()<<map<<"!";
}
 
мне приходит пустой map...


Название: Re: как из qml передать массив в c++ ?
Отправлено: ecspertiza от Ноябрь 01, 2012, 12:58
Не уверен что groups двумерный :) вот простейший пример и он работает хорошо

qml
Код:
var groups = new Array();
for (var i = 0; i < 10; ++i) {
  groups[i] = i;
}
window.setArr(groups);

cpp
Код:
void Window::setArr(QVariant var)
{
    qDebug() << Q_FUNC_INFO << var;
}

Есть подозрение что у вас groups действительно пустой, перед передачей в get попробуйте вывести содержимое этого контейнера

console.debug(groups)


Название: Re: как из qml передать массив в c++ ?
Отправлено: ecspertiza от Ноябрь 01, 2012, 13:03
Такой код

Код:
var child = new Array();
var groups = new Array();

for (var i = 0; i < 10; ++i) {
  child[i] = i;
}

for (var i = 0; i<child.length; i++){
  groups[i] = child;
}

window.setArr(groups);

тоже передается хорошо, так что скорее всего массив и в правду пустой


Название: Re: как из qml передать массив в c++ ?
Отправлено: virtual_root от Ноябрь 01, 2012, 15:34
он у меня точно не пустой. Но массив ассоциативный. Просто через console.log() он не выводится, но когда я вывожу например так
Код:
groups[i]["id"]
то получаю нужные данные. А вот в функцию. он правда приходит как пустой...


Название: Re: как из qml передать массив в c++ ?
Отправлено: ecspertiza от Ноябрь 01, 2012, 16:13
конечно не уверен, но может тогда попробовать в C++ части использовать QVariantMap


Название: Re: как из qml передать массив в c++ ?
Отправлено: virtual_root от Ноябрь 01, 2012, 16:52
уже пробовала) но не помогло... Может есть ещё идеи?)


Название: Re: как из qml передать массив в c++ ?
Отправлено: twp от Ноябрь 01, 2012, 18:07
Array конвертится в QVariantList http://doc.qt.digia.com/4.8-snapshot/qtbinding.html#javascript-arrays-and-objects (http://doc.qt.digia.com/4.8-snapshot/qtbinding.html#javascript-arrays-and-objects)


Название: Re: как из qml передать массив в c++ ?
Отправлено: virtual_root от Ноябрь 06, 2012, 12:55
спасибо!