Как сделать сигнал наподобие 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() // <==
}
}