Как программно добавить текст в QML TextArea? - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь передать данные журнала в мой интерфейс QML, по одной строке за раз, и добавить его в конец TextArea. Я рассмотрел несколько подходов. Следующее является наиболее перспективным. Я создал QAbstractListModel (в Python) и передал эту модель в ретранслятор, где она поступает как отдельный элемент (rowCount = 1), который я добавляю в TextArea с помощью строки

text: terminal_text.text + display

Это работает но я получаю это предупреждение каждый раз, когда текст обновляется.

file://.../TextArea.qml:728:9: QML QQuickTextEdit*: Binding loop detected for property "text"

См. код ретранслятора ниже.

Repeater {
    model: TerminalFeed { }
    delegate: TextArea {
        id: terminal_text
        font.family: "Courier"
        width: parent.width
        height: parent.height
        readOnly: true
        selectByMouse: true
        wrapMode: TextEdit.NoWrap
        horizontalScrollBarPolicy: Qt.ScrollBarAsNeeded
        verticalScrollBarPolicy: Qt.ScrollBarAsNeeded
        text: terminal_text.text + display
    }
}

Как я могу остановить это? Или у кого-нибудь есть лучший способ достичь того же результата?

1 Ответ

1 голос
/ 02 мая 2020

Технически это действительно обязательное значение l oop, поскольку text зависит от его собственной стоимости. Если QML не обнаружит его и не прекратит его, это приведет к бесконечному l oop обновлению.

Вместо использования привязки вы можете сделать что-то вроде этого:

Repeater {
    model: TerminalFeed { }
    delegate: TextArea {
        id: terminal_text
        font.family: "Courier"
        width: parent.width
        height: parent.height
        readOnly: true
        selectByMouse: true
        wrapMode: TextEdit.NoWrap
        horizontalScrollBarPolicy: Qt.ScrollBarAsNeeded
        verticalScrollBarPolicy: Qt.ScrollBarAsNeeded

        onDisplayChanged: {
            text = text + display;
        }
    }

}

При исходном подходе связывания он будет пытаться обновляться всякий раз, когда изменяется либо display , либо text. При таком подходе он будет пытаться обновлять только всякий раз, когда display изменяется - это то, что вы действительно хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...