Доступ к TextField из другого файла QML - PullRequest
1 голос
/ 23 марта 2019

У меня есть два файла .qml:

CustomText.qml :

Item 
{
    TextField
    {
        id: t1
        placeholderText: qsTr("Enter name")
    }
}

main.qml :

Window 
{
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    CustomText {width: 200; height: 200}

    Rectangle
    {
        id: r1      
        border.color: "black"
        width: 200
        height: 200
        x: 200
        y: 200
        Text 
        {
            text: t1.text
        }
    }
}

Этот код не работает, потому что идентификатор неизвестен.Как я могу получить доступ к тексту из TextField в main.qml?

1 Ответ

2 голосов
/ 23 марта 2019

Есть несколько способов сделать это, а именно

  1. Псевдоним t1.text, Связывание customText.text, или
  2. Псевдоним t1, Связывание customText.t1.text

Обратите внимание, что в обоих методах нам потребуется предоставить id вашему экземпляру CustomText, чтобы мы могли ссылаться на него. В обоих методах мы также будем использовать property aliases. Это позволяет вам выставить определенные свойства вашего CustomText.

Псевдоним t1.text, Bind customText.text

// CustomText.qml
Item 
{
    property alias text: t1.text    // set a property alias

    TextField
    {
        id: t1
        placeholderText: qsTr("Enter name")
    }
}

// Main.qml
Window 
{
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    CustomText { id: customText; width: 200; height: 200 }   // provide an id for reference    

    Rectangle
    {
        id: r1      
        border.color: "black"
        width: 200
        height: 200
        x: 200
        y: 200
        Text 
        {
            text: customText.text      // bind the text property
        }
    }
}

Псевдоним t1, Bind customText.t1.text

// CustomText.qml
Item 
{
    property alias t1: t1      // set a property alias

    TextField
    {
        id: t1
        placeholderText: qsTr("Enter name")
    }
}

// Main.qml
Window 
{
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    CustomText { id: customText; width: 200; height: 200 }    // provide an id for reference    

    Rectangle
    {
        id: r1      
        border.color: "black"
        width: 200
        height: 200
        x: 200
        y: 200
        Text 
        {
            text: customText.t1.text    // bind the property
        }
    }
}

Если вам нужно использовать только текст из TextField и ничего больше, я бы порекомендовал использовать первый метод, так как остальная часть t1 остается инкапсулированной (можно также сказать "* 1035"). * private"переменная).

Как правило, никогда не используют второй метод, если только вам не нужно модифицировать весь t1 объект вне файла. (Могут быть некоторые исключения, но такой шаблон имеет тенденцию предполагать изъян в шаблоне дизайна и требует рефакторинга.) Придерживайтесь первого метода. Если вы столкнулись с необходимостью ссылаться или изменять другие свойства TextField (placeholderText, font и т. Д.), Вам также следует указать псевдоним и предоставить эти свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...