如何使 onEditingFinished 之类的信号可用于单个 TextInput 元素,重用一个已定义的公共 TextInput

How to make a signal like onEditingFinished available to individual TextInput elements reusing one common TextInput defined

我是 QMLQt 的新手。我正在尝试制作多个 TextInput 元素,这些元素可以在触发 onEditingFinished 时发送自己的 text 。以下是我在 MyTextField.qml 中创建的 TextInput 项:

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
  }
}

我正在尝试在另一个 qml 文件中使用上面的 TextInput 元素,如下所示:

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"

如果我从我创建的父 TextInput 处理 onEditingFinished,它工作正常并将信号发送到我的 C++ class。但我正在尝试在 textfield1textfield2 中使用 onEditingFinished。 Qml 报告 onEditingFinished 属性 不可用。 如何使 onEditingFinishedtextfield1textfield2 中可用我发送我创建的每个唯一文本字段的文本。

只有根元素及其属性、信号和方法从 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() // <==
    }
}