Базовый макет QML для игры на концентрацию

#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>(...) , чтобы вы могли использовать его в качестве modelData

2. Вместо этого я бы использовал GridLayout . Кстати, для чего вам нужны классы C ? Я думаю, это можно было бы сделать, используя только QML

3. Спасибо за ваши комментарии. Я все еще пытаюсь разобраться с основной структурой приложений QML. Знаете ли вы какие-нибудь хорошие руководства или документацию, где я могу узнать, как правильно структурировать такое приложение?