Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
e
8 ноября 2016 г. 9: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 – сообщения растут как на дрожжах. Как это вылечить?
Виртуальный хостинг со скидкой 10 процентов
Виртуальный хостинг со скидкой 10 процентов
EVILEG предлагает надёжный хостинг со скидкой 10% на виртуальный хостинг и 5% на VPS
7

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

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

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

 

0
e
Хорошо, но как же тогда соединить сигналы VerifyWariningPage со слотами в main, если VerifyWariningPage вне области видимости?
0

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. Но я не заметил утечек памяти, даже если и ругается ошибками приложение, тем не менее сигналы и слоты нормально подключаются и всё работает. А вообще в таком случае я стараюсь перепроектировать логику работы приложения, чтобы было как можно меньше таких некрасивых мест, но это уже вопрос местечковый.

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

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

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

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

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

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Y
22 марта 2019 г. 9:39
Yavlados

Qt - Тест 001. Сигналы и слоты

  • Результат:21баллов,
  • Очки рейтинга-10
ЭА
22 марта 2019 г. 5:02
Эвелина Алексеева

C++ - Тест 001. Первая программа и типы данных

  • Результат:53баллов,
  • Очки рейтинга-4
m
21 марта 2019 г. 19:35
monevich

Qt - Тест 001. Сигналы и слоты

  • Результат:68баллов,
  • Очки рейтинга-1
Последние комментарии
22 марта 2019 г. 12:32
Евгений Легоцкой

Ну может бибилотеки не те положили? У вас сборка для MinGW, а либы для MSVC.
ВН
22 марта 2019 г. 11:08
Волчонок Над-Пропастью

Из кьюта приложение не хочет запускаться, аварийно завершается, но каких-либо ошибок не выдаёт. Оно открывается, после нажатия "старт" зависает и завершается. Если не из кьюта запускать дебаг ...
21 марта 2019 г. 15:49
Евгений Легоцкой

серьезно? Эта ошибка 404 уже даже не относится к данному вопросу. В каких-то urls в вашем проекте. Вопросы, которые не относятся непосредственно к статье, задавайте, пожалуйста на...
АБ
21 марта 2019 г. 15:00
Артем Бел

а это где? сейчас ошибка в debag такая: Page not found (404)Request Method: GETRequest URL: http://amadowshop.site/accounts/profile/
21 марта 2019 г. 12:47
Евгений Легоцкой

не вижу здесь проблемы, поменяйте url для callback в приложения oauth в социальных сетях https://amadowshop.site/auth/verify/complete/facebook/
Сейчас обсуждают на форуме
22 марта 2019 г. 18:14
Serg

Можно получить параметры командной строки с помощью аргументов функции main(): int main(int argc, char *argv[]){ for (int i = 0; i < argc; i++) { QString param(argv[i])...
22 марта 2019 г. 12:29
Дмитрий

Да, мьютекс добавил, но в том потоке, где сигнал вызывается.
ВН
22 марта 2019 г. 9:04
Волчонок Над-Пропастью

Да, на эту проблему! Зато у меня теперь новая, ругается на подключение QMediaPlayer, пишет, что не находит подобного файла или библиотеки. Пока не нашла как исправить, только вариант с переуст...
22 марта 2019 г. 8:58
Михаиллл

4) это , похоже, для создания видоизмененных страниц, для анимации. 3,5) добавить фвйл/qt/ui.qml
22 марта 2019 г. 8:04
Евгений Легоцкой

Привет. Если там std::vector , то наверное можно заранее подготовить вектор с необходимым количеством элементов и просто устанавливать значение по индексу элемента. Но в данном слу...
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы