QtQuick2和C++:使用中继器



我使用Qt 5.0.2和QtQuick 2.0来尝试构建一个非常简单的QML应用程序,显示瓦片。

我希望瓦片是动态创建与中继器,接口C++。

我找到了一个关于如何做到这一点的示例(MineHunt),但这个示例使用的是QtQuick 1和Qt 4.7。

这是我的代码:

import QtQuick 2.0
import "tiles"
Rectangle {
    width: 360
    height: 360
    Grid {
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.verticalCenter: parent.verticalCenter
        anchors.margins: 5
        columns: 3
        spacing: 10
        Repeater {
            id: repeater
            model: tiles
            delegate: tile
        }
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

此文件导入名为tiles的文件夹,其中包含另一个名为tile.qml的QML文件,该文件包含以下代码:

import QtQuick 2.0
Rectangle {
    id: tile
    width: 100
    height: 62
    color: "#ff0303"
    MouseArea {
        anchors.fill: parent
        onClicked: {
            var row = Math.floor(index / 3)
            var col = index - (Math.floor(index / 3) * 3)
            play(row, col)
        }
    }
}

我还有一个类,它实现了提供tiles模型所需的方法。

它编译得很好,但当我运行它时,我会得到以下错误:

ReferenceError: tile is not defined

我的代码出了什么问题?

delegate: tile

这是错误的,因为在当前作用域中没有定义"磁贴"名称。你可能想在那里实例化一个tile组件,所以你需要:

delegate: tile {}

这也是错误的另一个原因:类型名称必须以大写字母开头。因此:

delegate: Tile {}

这是正确的,但它不会按原样工作,因为QML不知道在哪里可以找到Tile类型。您需要在tiles子目录中添加一个qmldir文件,其中包含类似的内容

module tiles
Tile 1.0 tile.qml

相关内容

  • 没有找到相关文章

最新更新