LINUX.ORG.RU

QML on<item>Changed

 ,


0

1

Можно ли как то установить проперти и не вызывать при этом сигнал, что она была изменена? В частности, есть инпут поле, ввод с клавиатуры вызывает onTextChanged, дальше этот текст проходит 7 кругов ада и возвращается с правками обратно в text. Но получается, что оно начинает бегать по кругу.

★★★
Ответ на: комментарий от alex-w

угу, только в QML штатной жабоскриптовой функции нету.

vova7890 ★★★
() автор топика
Connections {
    target: myTextEdit
    onTextChanged: { /* do something */ }
    enabled: enableMySignals
}

Или внутри самого onTextChanged игнорировать сигнал. Кто именно запускает 7 кругов ада, свой код или какой-то баг в Qt?

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

гм, не знал о такой конструкции, спасибо.

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

vova7890 ★★★
() автор топика
Последнее исправление: vova7890 (всего исправлений: 1)
Ответ на: комментарий от vova7890

Походу так нельзя. Разве что сделать так, чтобы текст банально не менялся во время второй обработки (если ты каким-то образом парсишь текст, и решаешь, изменять его или нет). Но это не всегда возможно.

А вообще, изменять текст вводимый пользователем, да и еще во время процесса ввода - плохая идея. Всегда бесит, когда так как делают какие-нибудь сайты или программы.

equeim ★★
()
Ответ на: комментарий от equeim

Ну там своя история болезни. Как самый костыльный вариант - хранить прошлый текст. При событии ченжед - отдавать новый на обработку и заменять старым. Но это звиздец

vova7890 ★★★
() автор топика
Последнее исправление: vova7890 (всего исправлений: 1)
Ответ на: комментарий от vova7890

Как это? В слоте onTextChanged нельзя понять, как изменен текст: вводом пользователя или прямым изменением свойства text в коде программы. Как тут поможет хранение прошлого текста?

equeim ★★
()
Ответ на: комментарий от vova7890

Помню в своём коде тоже боролся с рекурсивным вызовом, как-то так:

property bool manualTextChange: false

onTextChanged: {
    if (manualTextChange) return;
    manualTextChange = true;
    /*do something*/
    manualTextChange = false;
}
Dendy ★★★★★
()
Ответ на: комментарий от Dendy

угу, но вариант с Connections более изящно выглядит, и походу работает

vova7890 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.