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

我开始学习QML,并且遇到以下错误:

ReferenceError:chatTextArea未定义

我有一个全局函数,通过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超出我的功能范围? 提前致谢。


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

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变成了一个Loader(每个文档),加载你给它的任何一个组件 ; 因此,您的代码中的SplitView是一个组件规范,并且该组件由单独的QML上下文中的Tab实例化(以文档根项目为基础)。 这就是为什么在该上下文中的所有内容都可以在范围链中查看事物(如appendMessage()函数),但不是相反:)

链接地址: http://www.djcxy.com/p/22617.html

上一篇: Can't access QML item by id inside SplitView

下一篇: UIView aspect ratio confuses systemLayoutSizeFittingSize