我使用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