【问题标题】:QML: How can I access the id of an Item outside of repeater?QML:如何在中继器之外访问项目的 ID?
【发布时间】:2025-12-23 09:35:17
【问题描述】:

我是 QML 新手,当我尝试从中继器内部访问元素时遇到问题。

我有一个中继器,它生成每个带有鼠标区域的矩形。单击鼠标区域应更改之前定义的背景窗口 root 的颜色,但单击时我只得到:“ReferenceError: root is not defined”。如果我在中继器之外创建一个带有鼠标区域的矩形,那么它就可以工作。那么如何使用中继器内的鼠标区域访问中继器外部的元素?感谢您的任何帮助。我现在真的被这个问题困住了。

import QtQuick 2.0
import QtQuick.Window 2.1

Window
id: root
visible: true
width: 600; height: 600
color: "black"
{
Grid
{
    columns: 3
    spacing: 20
    x: 20
    y: 20
    Repeater{
        id: repeater1
        model: 3
        Rectangle {
            color: "White"; width: 100; height: 100;
            radius: 10
            MouseArea
            {
                anchors.fill: parent
                onClicked:
                {
                    root.color="white"
                }
            }
        }
    }
}
}

【问题讨论】:

    标签: repeater qml


    【解决方案1】:

    我在我的 windows 模拟器上测试了你的代码,但我什至无法正确运行它;它只是向我展示了一个白色的空白页。也许是因为我没有在 main.cpp 中使用 QQuickWindow。

    为了在我的模拟器上运行它,我将您的 Window 元素更改为 Rectangle,它运行良好。当我单击一个按钮时,背景颜色变为白色。

    【讨论】:

    • 如果您必须使用Window元素,您可以发布您的main.cpp吗?
    【解决方案2】:

    先导入这两个头文件

    import QtQuick 2.0
    import QtQuick.Window 2.1
    

    您的窗口项目 root

    的第二个花括号 {} 在哪里

    【讨论】:

    • 我现在添加了。无论如何,我在我的源代码中都有它,现在在问题中对其进行了调整。导入和花括号与问题无关。如果你能帮助我,我会很高兴。感谢您的回复。
    • 我用你的代码构建了一个 QT Quick UI,它对我来说很好用。首先尝试将其作为用户界面进行测试,看看它是否适合您。