qt5 — 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 содержащий другой файл 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

Что не так с моим кодом?

1

Решение

delegate: tile

Это неправильно, потому что в текущей области не определено имя «плитки». Вы, вероятно, хотите создать экземпляр компонента плитки там, поэтому вам нужно:

delegate: tile {}

Это также неправильно по другой причине: имена типов должны начинаться с заглавных букв. Так:

delegate: Tile {}

Это правильно, но не будет работать как есть, потому что QML не знает, где найти Tile тип. Вам нужно добавить qmldir файл внутри вашего tiles подкаталог, содержащий что-то вроде этого

module tiles
Tile 1.0 tile.qml
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]