Как сделать сигнал наподобие onEditingFinished доступным для отдельных элементов TextInput, повторно используя один общий определенный TextInput

Я новичок в QML & Qt, Я пытаюсь сделать несколько TextInput элементы, которые могут отправлять свои собственные text когда onEditingFinished срабатывает. Следующее является TextInput элемент, который я создал в MyTextField.qml:

MyTextField.qml

import QtQuick 2.5
import QtQuick.Controls 1.4

Item {

implicitHeight: 200
implicitWidth: 1000

property alias inputMethodHints: myTextField.inputMethodHints
property alias text: myTextField.text

Rectangle {
    anchors.fill: parent
    radius: 40
  }


TextInput {
    id: myTextField
    objectName: "myTextField"
    anchors.fill: parent
    verticalAlignment: Text.AlignVCenter
    font.pixelSize: 300
    color: 'white'

    signal qmlSignal(string msg)
    onEditingFinished: qmlSignal(text)  //This works
  }
}

Я пытаюсь использовать вышеупомянутое TextInput элемент в другом qml файл как ниже:

SomeOtherPage.qml

Column {
    anchors.top: parent.top
    anchors.left: parent.left
    anchors.right: parent.right
    anchors.margins: theme.defaultMargin

    MyTextField {
        id: textfield1
        objectName: "textfield1"
        anchors.left: parent.left
        anchors.right: parent.right
        text: qsTr("some text")

       signal qmlSignal11(string msg)
       onEditingFinished: qmlSignal11(text)  //This doesn't work !!
    }

    MyTextField {
        id: textfield2
        objectName: "textfield2"
        anchors.left: parent.left
        anchors.right: parent.right
        text: qsTr("some other text")

       signal qmlSignal22(string msg)
       onEditingFinished: qmlSignal22(text)  //This doesn't work !!
    }
}      

В MyTextField блоки, QML не позволяет мне использовать onEditingFinished совсем. Жалуется Cannot assign to non-existent property "onEditingFinished" когда я запускаю приложение.

Если я справлюсь onEditingFinished от родителя TextInput Я создал, он работает нормально и отправляет сигнал на мой C++ учебный класс. Но я пытаюсь использовать onEditingFinished в textfield1 & textfield2 , Qml сообщает, что onEditingFinished собственность не доступна. Как я могу сделать onEditingFinished доступно в textfield1 & textfield2 так что я отправляю текст каждого уникального текстового поля, которое я создаю.

1 ответ

Решение

Только корневой элемент, его свойства, сигналы и методы видны снаружи MyTextField.qml. Точно так же, как вы уже определили несколько свойств внутреннего myTextField, вы также должны перенаправить сигналы, которые вы хотите использовать извне:

MyTextField.qml

import QtQuick 2.5
import QtQuick.Controls 1.4

Item {
    id: root
    ...
    signal editingFinished() // <==
    ...
    TextField {
        id: myTextField
        ...
        onEditingFinished: root.editingFinished() // <==
    }
}
Другие вопросы по тегам