#c #qml #qt-quick
#c #qml #qt-быстрый
Вопрос:
Я пытаюсь улучшить свои навыки QML, создавая игру на память в качестве многопользовательского приложения. (также известный как концентрация). Я уже создал классы c , такие как Player, Game и Card. Класс Game содержит вектор вектора карт (QVector< QVector< Card*>> m_field;), который представляет поле всех карт. Игровой класс зарегистрирован в движке QML как одноэлементный тип, используя «qmlRegisterSingletonType(..)».
Сейчас я создаю пользовательский интерфейс, используя повторители, как показано в коде ниже. Есть ли более удобный способ создать такой пользовательский интерфейс? Могу ли я каким-либо образом прикрепить экземпляр класса c Card к экземпляру QML Card?
import QtQuick 2.11
import QtQuick.Window 2.11
import de.memory.game_instance 1.0
Window {
id: root
visible: true
width: 450
height: 700
title: qsTr("Memory Game")
Column {
id: col
Repeater {
id: rows
model: Constants.GAME_FIELD_HEIGHT
delegate: Row {
property int row_idx: modelData
Repeater {
id: cells
model: Constants.GAME_FIELD_WIDTH
delegate: Card {
height: root.height / Constants.GAME_FIELD_HEIGHT
width: root.width / Constants.GAME_FIELD_WIDTH
img_source: Game.getImageAt(row_idx, modelData);
img_shown: false
}
}
}
}
}
}
Комментарии:
1. вы должны использовать
qmlRegisterUncreatableType<Card>(...)
, чтобы вы могли использовать его в качестве modelData2. Вместо этого я бы использовал GridLayout . Кстати, для чего вам нужны классы C ? Я думаю, это можно было бы сделать, используя только QML
3. Спасибо за ваши комментарии. Я все еще пытаюсь разобраться с основной структурой приложений QML. Знаете ли вы какие-нибудь хорошие руководства или документацию, где я могу узнать, как правильно структурировать такое приложение?