Я использую 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
содержащий другой файл QML с именем tile.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
Это неправильно, потому что в текущей области не определено имя «плитки». Вы, вероятно, хотите создать экземпляр компонента плитки там, поэтому вам нужно:
delegate: tile {}
Это также неправильно по другой причине: имена типов должны начинаться с заглавных букв. Так:
delegate: Tile {}
Это правильно, но не будет работать как есть, потому что QML не знает, где найти Tile
тип. Вам нужно добавить qmldir
файл внутри вашего tiles
подкаталог, содержащий что-то вроде этого
module tiles
Tile 1.0 tile.qml
Других решений пока нет …