Nano Hash - криптовалюты, майнинг, программирование

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

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

25.06.2013

Ответы:


1
delegate: tile

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

delegate: tile {}

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

delegate: Tile {}

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

module tiles
Tile 1.0 tile.qml
25.06.2013
  • Я добавил файл qmldir, как вы упомянули, и изменил строку делегата на delegate: Tile {}, но Qt Creator подчеркивает эту строку с ошибкой Unknown component (M300). Я попытался добавить команду импорта: import "tiles/tile.qml" 1.0, но все еще получаю сообщение об ошибке. Есть идеи ? 25.06.2013
  • Я не знаю о Creator (который может задыхаться от типов по другим причинам), но с помощью модификаций, о которых я говорил вам, я могу запустить этот код с помощью qmlscene: pastebin.com/jcx7cD7P 25.06.2013
  • Кстати, если вы покопаетесь в документации Creator, там должны быть несколько советов о том, как заставить его видеть ваши пользовательские типы QML (это должно включать создание файла qmltypes, но я не уверен на 100%) 26.06.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..