2013-04-09 2 views
0

Ive искал весь день, но этот вопрос меня так беспокоит.отправить 2d массив целочисленные данные из C++ в qml

Im создает игру (похожую на «Линии») и im пытается сохранить состояние сетки (0 - если ясно,> 0 - если хранится некоторый шар). У меня есть слот в моем классе:

int Game::getGridMap() { 
    return gameGridArray[9][9]; 
} 

, а затем:

onPressed: { 
       buttonStart.color = "#222333" 

       handleGame.initGame(); 
       var aRect = handleGame.getGridMap(); 
      } 

но она возвращает «неопределенный» или то вроде этого.

что я делаю неправильно? является ли лучший способ хранить эти данные?

ответ

1

Я нашел решение!

Во-первых, я создал:

QList<int> getGridMap(); 

, а затем создал список из 2 мерного массива:

for (int i = 0; i < 9; i++) { 
     for (int j = 0; j < 9; j++) { 
      oChildList.append(gameGridArray[i][j]); 
     } 
    } 

Эти значения могут быть переданы Исли QML. а затем просто превратили его снова в QML:

var aRect = create2DArray(9); 
var aString = handleGame.getGridMap(); 

aRect = listToArray(aString); 

function listToArray(arr) { 
    var arr2d = new create2DArray(9); 

    for (var i = 0; i < 9; i++) { 
     for (var j = 0; j < 9; j++) { 
      arr2d[i][j] = arr[i*9+j]; 
     } 
    } 

    return arr2d; 
} 

function create2DArray(rows) { 
    var arr = []; 

    for (var i=0;i<rows;i++) { 
    arr[i] = []; 
    } 

    return arr; 
} 
+1

как вы проходя handleGame.getGridMap() в QML? Как QML знает, что это за функция? – johnbakers

-1

Перед определением getGridMap() в заголовочном файле класса игры вам нужно поставить «Q_INVOCABLE».

Например,

Q_INVOCABLE INT getGridMap();

+0

его уже слот, так что его можно назвать с QML, но когда мой C++ Funtion возвращает массив, при вызове из QML возвращается только 0. – Fever