Михаиллл
Михаиллл6 июля 2019 г. 2:15

Как сделать цикл for в QML

Добрый день.
Как сделать цикл for в QML?
Вариант записи с++ не работает.
Так тоже не работает

for ( i= 10 in 20)
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

9
Andrei Yankovich
  • 6 июля 2019 г. 2:52

Если хочешь писать на qml учи javascript так как qml базируется на нем.
цикл for

const array = [1,2,3]
for (let i = 0; i < array.length; ++i) {
    console.log(array[i]);
}

цикл foreach

const array = [1,2,3]

array.forEach(function(obj) {
    console.log(obj);
});
    Andrei Yankovich
    • 6 июля 2019 г. 2:54
    • Ответ был помечен как решение.

    для qt постарше 5.12. (например 5.9)
    используй var в место let и const

      Михаиллл
      • 6 июля 2019 г. 3:09
      • (ред.)

      Сделал так, но не работает:

      for (let i= 10; i < 20; i++)
      

      Говорит:
      qrc:/main.qml:12 Unexpected token `for'

      qrc:/main.qml:12 Unexpected token `let'

      qrc:/main.qml:12 Expected token `,'

        Evgenii Legotckoi
        • 6 июля 2019 г. 5:17
        • (ред.)

        Покажите код main файла qml. Циклы в QML тоже нельзя пихать куда попало.

          Михаиллл
          • 6 июля 2019 г. 5:20

          Вот код

          import QtQuick 2.12
          import QtQuick.Window 2.12
          import QtLocation 5.12
          import QtPositioning 5.12
          
          Window {
              visible: true
                  width: 480
                  height: 720
                  title: qsTr("Map OSM")
          
                  for (var i = 0; i < 9; i++)  {
                      console.log(i)
                      i++
                  }
          
                  /* С помощью объекта Connections
                    * Устанавливаем соединение с классом ядра приложения
                    * */
                   Connections
                   {
                       target: houseNumber // Указываем целевое соединение
                       /* Объявляем и реализуем функцию, как параметр
                        * объекта и с имененем похожим на название сигнала
                        * Разница в том, что добавляем в начале on и далее пишем
                        * с заглавной буквы
                        * */
                      /* onSendToQml: {
                           labelCount.text = count // Устанавливаем счётчик в текстовый лейбл
                       }*/
                   }
          
                  Loader
                  {
                      id: loader
                      anchors.fill: parent
                      //source: "map.qml"
                  }
          }
          
            Evgenii Legotckoi
            • 6 июля 2019 г. 5:27

            Туда нельзя цикл вставлять. Циклы и любую подобную логику можно вставлять только в функции в QML, или в обработчики сигналов, что тоже самое, что функции.

            То есть ваш код не заработает в принципе.

            import QtQuick 2.12
            import QtQuick.Window 2.12
            import QtLocation 5.12
            import QtPositioning 5.12
            
            Window {
                visible: true
                    width: 480
                    height: 720
                    title: qsTr("Map OSM")
            
                    /* С помощью объекта Connections
                      * Устанавливаем соединение с классом ядра приложения
                      * */
                     Connections
                     {
                         target: houseNumber // Указываем целевое соединение
                         /* Объявляем и реализуем функцию, как параметр
                          * объекта и с имененем похожим на название сигнала
                          * Разница в том, что добавляем в начале on и далее пишем
                          * с заглавной буквы
                          * */
                        /* onSendToQml: {
                             labelCount.text = count // Устанавливаем счётчик в текстовый лейбл
                         }*/
                     }
            
                    Loader
                    {
                        id: loader
                        anchors.fill: parent
                        //source: "map.qml"
                    }
            
                    Component.onCompleted: {
                        for (var i = 0; i < 9; i++)  {
                            console.log(i)
                            i++
                        }
                    }
            }
            

            Так заработает

              Михаиллл
              • 6 июля 2019 г. 5:35

              Спасибо, Заработало. Но почему так?

                Evgenii Legotckoi
                • 6 июля 2019 г. 5:43

                Потому, что QML имеет такие правила написания код. У него есть структура - это по сути расширенный JSON, документ. Поэтому он собственно и хорошо совместим с JavaScript, а также является интерпретируемым языком. Можно написать проект чисто на QML и запустить его в интерпретаторе, без сборки проекта.

                Структура QML такова, что достаточно вольным образом можно объявлять объекты, свойства и функции.

                Вот например корректный код на QML

                import QtQuick 2.12
                import QtQuick.Window 2.12
                import QtLocation 5.12
                import QtPositioning 5.12
                
                Window {
                    visible: true
                        width: 480
                        height: 720
                        title: qsTr("Map OSM")
                
                         Connections
                         {
                             target: houseNumber // Указываем целевое соединение
                         }
                
                        Loader
                        {
                            id: loader
                            anchors.fill: parent
                        }
                
                        Component.onCompleted: {
                            for (var i = 0; i < 9; i++)  {
                                console.log(i)
                                i++
                            }
                        }
                
                        function showI() {
                            for (var i = 0; i < 9; i++)  {
                                console.log(i)
                                i++
                            }
                        }
                }
                

                Здесь объявлены объекты

                • Window
                • Connections
                • Loader

                Свойства

                • width:
                • height:
                • title:

                Функции

                • function showI()

                Всё это представляет древовидную структуру и укладывается в декларативный стиль программирования.

                А ваш цикл - это уже из императивного программирования. И это может быть написано только внутри функций в qml файлах. То есть либо в обработчиках, либо в теле функций, который были объявлены, как например showI функция.

                  Михаиллл
                  • 6 июля 2019 г. 5:47

                  Ясно, спасибо за объяснение.

                    Комментарии

                    Только авторизованные пользователи могут публиковать комментарии.
                    Пожалуйста, авторизуйтесь или зарегистрируйтесь
                    AD

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:50баллов,
                    • Очки рейтинга-4
                    m
                    • molni99
                    • 26 октября 2024 г. 6:37

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:80баллов,
                    • Очки рейтинга4
                    m
                    • molni99
                    • 26 октября 2024 г. 6:29

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:20баллов,
                    • Очки рейтинга-10
                    Последние комментарии
                    i
                    innorwall15 ноября 2024 г. 7:27
                    Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
                    i
                    innorwall15 ноября 2024 г. 2:26
                    Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
                    i
                    innorwall15 ноября 2024 г. 0:03
                    Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
                    i
                    innorwall14 ноября 2024 г. 16:42
                    Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                    Сейчас обсуждают на форуме
                    i
                    innorwall14 ноября 2024 г. 8:39
                    добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                    i
                    innorwall11 ноября 2024 г. 15:55
                    Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                    9
                    9Anonim25 октября 2024 г. 14:10
                    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                    ИМ
                    Игорь Максимов3 октября 2024 г. 9:05
                    Реализация навигации по разделам Спасибо Евгений!

                    Следите за нами в социальных сетях