qt - 无法访问 TabView/Tab 内的项目

标签 qt qml qtquick2 qtquickcontrols

假设我们有一个如下所示的 QML 文件:

Window {

    Component.onCompleted: rect.color  ="green"

    TabView {
        Tab {
            Rectangle {
                id:  rect
                color: "white"
            }
        }
    }
}

当我运行这段代码时,出于某种原因,它给了我这个错误:

ReferenceError: rect is not defined

有人会说这是范围问题,但下面的代码工作正常:

Window {

    Component.onCompleted: rect.color  ="green"

    Item {
        Item {
            Rectangle {
                id:  rect
                color: "white"
            }
        }
    }
}

在我的例子中,我有一个很大的表单,里面有选项卡和控件,我将所有控件传递给几个函数来验证表单,即像这样的一些代码:

function onClose() {
    validate(control1);
    validate(control2);
    // etc
}

但是在通过 id 访问控件时出现上述错误。

最佳答案

将矩形绑定(bind)到颜色参​​数而不是硬编码值怎么样?

这将进一步分离您的模型和 View 代码,以使其在项目的其他地方也更具可读性......尝试:

Window {

    property string myColor: "White"
    Component.onCompleted: myColor = "Green"

    TabView {
        Tab {
            Rectangle {
                id:  rect
                color: myColor
            }
        }
    }

要查看 QML 对象树,您需要在 Debug模式下启动您的项目。然后拆分您的代码窗口,以便显示“局部变量和表达式” View (在右侧勾选复选框)。您将看到您的根项和嵌套在树中的所有其他控件,现在您可以直接编辑它们的属性值,更改将立即呈现。有一个关于调试的 youtube 视频教程:https://youtu.be/mPXn6L2Wftc?t=19m55s

我不确定树是否会让您在运行时访问控件,但它可能会帮助您进行调试。

关于qt - 无法访问 TabView/Tab 内的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30499037/

相关文章:

c++ - QCustomPlot 重新绘制 QCPLayer

qt - 如何本地化 Qt qmldir 插件?

qt - 向 QQuickItem 添加背景图像

android - 为 TableView 中的新项目设置动画

c++ - 定义QML信号参数类型时出现意外的 `:' token

c++ - 使用 cmake 构建 Qt5 项目

qt - 调整和旋转 QGraphicsItem 会导致奇怪的形状

c++ - Qt对象删除导致崩溃

ios - QT Creator iOS 错误 : The settings in the Devices window of Xcode might be incorrect

qt - 如何制作qml选项卡顺序导航?