将2d数组整数数据从c ++发送到qml

时间:2013-04-09 20:25:55

标签: c++ qt qml

我一整天都在搜索,但这个问题让我很困扰。

我正在创建一个游戏(类似于“行”)并且我试图保存网格状态(0 - 如果清除,则> 0 - 如果存储了一些球)。我班上有一个插槽:

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

然后:

onPressed: {
                buttonStart.color = "#222333"

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

但它返回“undefined”或类似的smth。

我在做错了什么?这是存储这些数据的更好方法吗?

2 个答案:

答案 0 :(得分: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 :(得分:-1)

你需要在游戏类头文件中定义getGridMap()之前放置“Q_INVOCABLE”。

例如,

Q_INVOCABLE int getGridMap();