如何使 onEditingFinished 之类的信号可用于单个 TextInput 元素,重用一个已定义的公共 TextInput
How to make a signal like onEditingFinished available to individual TextInput elements reusing one common TextInput defined
我是 QML
和 Qt
的新手。我正在尝试制作多个 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。但我正在尝试在 textfield1
和 textfield2
中使用 onEditingFinished
。 Qml 报告 onEditingFinished
属性 不可用。 如何使 onEditingFinished
在 textfield1
和 textfield2
中可用我发送我创建的每个唯一文本字段的文本。
只有根元素及其属性、信号和方法从 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() // <==
}
}
我是 QML
和 Qt
的新手。我正在尝试制作多个 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。但我正在尝试在 textfield1
和 textfield2
中使用 onEditingFinished
。 Qml 报告 onEditingFinished
属性 不可用。 如何使 onEditingFinished
在 textfield1
和 textfield2
中可用我发送我创建的每个唯一文本字段的文本。
只有根元素及其属性、信号和方法从 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() // <==
}
}