导航和寻址 QMLComponent

发布于 2024-10-31 02:36:46 字数 347 浏览 1 评论 0原文

我正在开发一个桌面应用程序,该应用程序使用带有大量 QML 组件的 QML GUI。 这些是层次结构的一部分:

main -> toolbar -> searchbar -> editfield

main -> resultlist -> header -> button1

找不到在button1的信号处理程序中访问editfield的文本内容的方法。是否可以在 QML 或 Javascript 中做到这一点?

我知道我可以使用 objectName 属性访问 C++ 部分中的元素。

I am working on a desktop application the uses a QML GUI with a lot of QML Components.
These are parts of the hierarchy:

main -> toolbar -> searchbar -> editfield

and

main -> resultlist -> header -> button1

I could not find a way to access the text contents of editfield in a signal handler for button1. Is it possible to do that in QML or Javascript?

I know I can access the element in the C++ part by using the objectName property.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟花肆意 2024-11-07 02:36:46

由于 QML 使用动态作用域(→ Doc ),子元素可以访问所有祖先的属性
如果它们位于不同的文件中也没关系。

因此,您可以向 main 添加一个 editFieldText 属性并绑定
editfield 的 text 属性。然后您可以访问 editFieldText
来自各地:

//=== main.qml ===
import QtQuick 1.0

Rectangle {
    id: main

    property string editFieldText

    Toolbar {
        // [...]
    }

    Resultlist {
        // [...]
    }
}


//=== EditField.qml ===
import QtQuick 1.0

TextInput {
    // bind text property to main.editFieldText
    Binding {
        target: main;
        property: "editFieldText";
        value: text
    }
}


//=== Header.qml ===
import QtQuick 1.0

Rectangle {
    Button {
        onClick: {
            console.log(main.editFieldText);
            // or simply
            console.log(editFieldText);
        }
    }
}

Due to QML uses dynamic scoping (→ Doc), child elements can access the properties of all ancestors
and it doesn't matter if they are in different files.

So you could add an editFieldText property to main and bind the
text property of editfield to it. Then you can access editFieldText
from everywhere:

//=== main.qml ===
import QtQuick 1.0

Rectangle {
    id: main

    property string editFieldText

    Toolbar {
        // [...]
    }

    Resultlist {
        // [...]
    }
}


//=== EditField.qml ===
import QtQuick 1.0

TextInput {
    // bind text property to main.editFieldText
    Binding {
        target: main;
        property: "editFieldText";
        value: text
    }
}


//=== Header.qml ===
import QtQuick 1.0

Rectangle {
    Button {
        onClick: {
            console.log(main.editFieldText);
            // or simply
            console.log(editFieldText);
        }
    }
}
彼岸花似海 2024-11-07 02:36:46

您可以使用别名属性将 editfield.text 作为 main 的属性。该属性应该可以从button1 访问。

You can use alias properties to have the editfield.text as a property of main. This property should be accessible from button1.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文