2013-04-09 94 views
0

我一直在尋找整天,但這個問題讓我非常困擾。我創建一個遊戲(類似於「Lines」),並試圖保存網格狀態(0 - 如果清除,> 0 - 如果存儲一些球)。我有一個插槽在我的課:從C++發送2d數組整數數據到qml

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]); 
     } 
    } 

此值可以是easely傳遞給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 2013-12-10 01:23:36

-1

您需要在Game類頭文件中定義getGridMap()之前放置「Q_INVOCABLE」。

例如,

Q_INVOCABLE INT getGridMap();

+0

它已經是一個插槽,因此它可以從QML調用,但是當我的C++ funtion返回數組,當從QML收益就稱爲0 – Fever 2013-04-11 21:24:11