gpt4 book ai didi

qt - 无法通过 SplitView 中的 id 访问 QML 项目

转载 作者:行者123 更新时间:2023-12-04 12:40:58 29 4
gpt4 key购买 nike

我已经开始学习 QML,但出现以下错误:

ReferenceError: chatTextArea is not defined



我有一个全局函数,它通过 id 对同一个 QML 文件中的项目执行某些操作。

出于某种原因,我无法通过我的 TextArea 的 ID 或 SplitView 内的任何项目进行访问。但是我能够操作 TabView 和每个 Tab 的属性。

我损坏的代码:
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1

Rectangle {
id: lobby

function appendChatMsg(msg) {
chatTextArea.append(msg) //causes: ReferenceError: chatTextArea is not defined
}

TabView {
id: frame

Tab { //I CAN access this item via ID.
id: controlPage

SplitView {
anchors.fill: parent

TableView {
Layout.fillWidth: true
}

GridLayout {
columns: 1

TextArea { //This item I CANNOT access via ID.
id: chatTextArea

Layout.fillHeight: true
Layout.fillWidth: true
}

TextField {
placeholderText: "Type something..."
Layout.fillWidth: true
}
}
}
}
}
}

知道为什么 chatTextArea 超出了我的功能范围吗?提前致谢。

最佳答案

将代码的起始部分更改为 smth,如下所示:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1

Rectangle {
id: lobby

function appendChatMsg(msg) {
controlPage.chatArea.append(msg) //causes: ReferenceError: chatTextArea is not defined
}

TabView {
id: frame

Tab { //I CAN access this item via ID.
id: controlPage
property Item chatArea: item.chatArea

SplitView {
property Item chatArea: chatTextArea

之所以有效,是因为 Tab结果表现得像一个加载器(根据文档),加载任何一个 组件 你给它;因此, SplitView在您的代码中是一个组件规范,该组件由 Tab 实例化。在单独的 QML 上下文中(以文档根项的上下文为父级)。这就是为什么该上下文中的所有内容都可以看到作用域链上的内容(如 appendMessage() 函数),但反过来不行:)

关于qt - 无法通过 SplitView 中的 id 访问 QML 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656107/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com