e
evru08 листопада 2016 р. 04:08

QML Binding loop detected for property

signal, qml, connections

Добрый день! Во вложении пример (Qt 5.7.0) , в котором при нажатии на кнопку подгружается Pane в StackView. Проблема в том, что в отладочном окне выводится сообщение: Binding loop detected for property “contentHeight”. Это сообщение появляется при добавлении второго Label в Pane со свойством Text.WordWrap. При добавлении еще Label – сообщения растут как на дрожжах. Как это вылечить?
test_1.zip
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

7
Evgenii Legotckoi
  • 08 листопада 2016 р. 12:31

Добрый день.
Петля из-за того, что VerifyWarningPage объявлено в качестве property, эта штука находится вне StackView, а когда помещаете его в StackView, то начинает сходить с ума.

сделайте вот так

    Button {
        text: "test"
        onClicked: stackView.push("qrc:/VerifyWarningPage.qml")
    }

 

    e
    • 09 листопада 2016 р. 00:12
    Хорошо, но как же тогда соединить сигналы VerifyWariningPage со слотами в main, если VerifyWariningPage вне области видимости?
      Evgenii Legotckoi
      • 09 листопада 2016 р. 13:58

      1. Переименовать сигнал в VerifyWarningPage . Вы назвали его как обработчик.
      То есть, допустим сигнал называется anySignal(), а обработчик уже будет называться как onAnySignal(). В вашем же случае придётся тогда обработчик определять как onOnWarning:
      Следовательно называем следующим образом:

      signal warning(string source, string title)

      Подробнее про сигналы и слоты в QML можно прочесть здесь Сигналы и слоты в QML

      2. Прикрутить Connections на текущий item в stackView:

      Connections {
          target: stackView.currentItem
          onWarning: console.log("Hello")
      }

      Конечно, может быть такая ситуация, что разные сигналы используются для разных item`ов в stackView. Но я не заметил утечек памяти, даже если и ругается ошибками приложение, тем не менее сигналы и слоты нормально подключаются и всё работает. А вообще в таком случае я стараюсь перепроектировать логику работы приложения, чтобы было как можно меньше таких некрасивых мест, но это уже вопрос местечковый.

        e
        • 10 листопада 2016 р. 01:28
        Сообщения можно отключить ignoreUnknownSignals: true. Проблема в другом, разные item’ы в StackView имеют одинаковый сигнал currentIndexChanged, а обработчики должны быть разные, в предложенном варианте Connections это сделать не позволяет.
          Evgenii Legotckoi
          • 10 листопада 2016 р. 04:00

          Я Вам ответил на поставленный вопрос. А некий сигнал currentIndexChanged, который Вы придумали в своём последнем сообщении вообще нигде до этого не фигурировал. То есть я про него не знал.

          Поэтому исходя из этого:

          Проблема в другом, разные item’ы в StackView имеют одинаковый сигнал currentIndexChanged,

          Определитесь сначала, что именно пытаетесь сделать, и после этого только сформулируйте проблему. И желательно подробно её формулируйте, поскольку я не могу допридумывать за Вас, как будет работать Ваше приложение и какие могут быть у него проблемы.

          А вообще, включайте воображение при решении задачи. Сигнал может передавать уникальный идентификатор конкретного Item, по которому через switch case конструкцию будет определяться логика обработки для конкретного item в stackview.

            e
            • 14 листопада 2016 р. 01:18
            • Відповідь була позначена як рішення.
            Евгений, большое Вам спасибо. Ваши ответы натолкнули меня на другой способ решения возникших проблем. Сигналы соединил скриптом, типа: 
            var verifyTuPage = stackView.push(“qrc:/VerifyTuPage.qml”)
            verifyTuPage.currentIndexChanged.connect(verifyTuPage_onCurrentIndexChanged)
             и так далее.
              Evgenii Legotckoi
              • 14 листопада 2016 р. 11:41
              Хорошо, что всё получилось. Вы молодец.
              И решение интересное подобрали в итоге.

                Коментарі

                Only authorized users can post comments.
                Please, Log in or Sign up
                AD

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

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

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

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

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

                • Результат:20бали,
                • Рейтинг балів-10
                Останні коментарі
                ИМ
                Игорь Максимов22 листопада 2024 р. 11:51
                Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                Evgenii Legotckoi
                Evgenii Legotckoi31 жовтня 2024 р. 14:37
                Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                A
                ALO1ZE19 жовтня 2024 р. 08:19
                Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                ИМ
                Игорь Максимов05 жовтня 2024 р. 07:51
                Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas505 липня 2024 р. 11:02
                QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                Тепер обговоріть на форумі
                Evgenii Legotckoi
                Evgenii Legotckoi24 червня 2024 р. 15:11
                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                t
                tonypeachey115 листопада 2024 р. 06:04
                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                NSProject
                NSProject04 червня 2022 р. 03:49
                Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                9
                9Anonim25 жовтня 2024 р. 09:10
                Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                Слідкуйте за нами в соціальних мережах