首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以编程方式将文本追加到QML TextArea?

如何以编程方式将文本追加到QML TextArea?
EN

Stack Overflow用户
提问于 2020-05-02 15:19:39
回答 2查看 633关注 0票数 1

我正在尝试将日志数据传递到我的QML前端,一次一行,并将其附加到TextArea的末尾。我考虑过几种方法。下面是最有希望的。我已经创建了一个QAbstractListModel (Python语言),并将此模型传递到一个中继器中,在中继器中作为单个项(rowCount =1)到达,并使用下面的代码行将其附加到TextArea中

代码语言:javascript
运行
复制
text: terminal_text.text + display

这是可行的,但每次文本更新时,我都会收到此警告。

代码语言:javascript
运行
复制
file://.../TextArea.qml:728:9: QML QQuickTextEdit*: Binding loop detected for property "text"

有关中继器的代码,请参阅以下内容。

代码语言:javascript
运行
复制
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
    }
}

我怎样才能阻止这种情况的发生呢?或者,有没有人有更好的方法来达到同样的结果?

EN

回答 2

Stack Overflow用户

发布于 2020-05-02 22:40:51

从技术上讲,这确实是一个绑定循环,因为text依赖于它自己的值。如果QML没有检测到它并破坏它,将导致无限循环的更新。

您可以这样做,而不是使用绑定:

代码语言:javascript
运行
复制
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;
        }
    }

}

使用最初的绑定方法,它将尝试并在displaytext发生更改时进行更新。使用这种方法,它只会尝试在display发生变化时进行更新--这才是您真正想要的。

票数 1
EN

Stack Overflow用户

发布于 2021-05-23 20:52:50

我遇到了一个类似的问题,我想在QML窗口中显示记录的数据。

我使用从QML TextField继承的insert()方法。插入位置是TextArea的长度。

代码语言:javascript
运行
复制
TextArea {
    id: outputTextArea
}

Component.onCompleted: {
    data = "dummyString"
    outputTextArea.insert(outputTextArea.length, data)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61555771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档