2016-10-29 4 views
0

QML & Qt의 새로운 기능입니다. onEditingFinished이 발생하면 text을 보낼 수있는 여러 개의 TextInput 요소를 만들려고합니다.정의 된 공통 TextInput을 재사용하여 개별 TextInput 요소에서 onEditingFinished와 같은 신호를 만드는 방법

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 내가 MyTextField.qml에서 생성 한 TextInput 항목입니다 다음 .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++ 클래스에 신호를 보내 잘 작동합니다. 하지만 onEditingFinishedtextfield1 & textfield2에 사용하려고합니다. Qml은 onEditingFinished 속성을 사용할 수 없다고보고합니다.onEditingFinishedtextfield1 & textfield2에서 어떻게 사용할 수 있도록 만들면 각 고유 한 텍스트 필드의 텍스트를 보낼 수 있습니다.

+1

오류 - 항목을 : 이미 내부하여 myTextField의 몇 가지 속성 별명을, 당신은 또한 신호를 전달해야합니다 것처럼 당신은 외부에서 사용하려면 onEditingFinished '신호가 없습니다. 그리고 그것은 절대적으로 옳습니다. MyTextField에는 그러한 신호가 없습니다. 그래서 당신은'MyTextField'의 루트에 신호를 추가하고'TextInput.onEditingFinished'에서 방출해야합니다. – folibis

답변

4

루트 요소, 해당 속성, 신호 및 메서드 만 MyTextField.qml 외부에서 볼 수 있습니다. 꽤 분명하다

MyTextField.qml

import QtQuick 2.5 
import QtQuick.Controls 1.4 

Item { 
    id: root 
    ... 
    signal editingFinished() // <== 
    ... 
    TextField { 
     id: myTextField 
     ... 
     onEditingFinished: root.editingFinished() // <== 
    } 
} 
+0

감사합니다. 설명해 주셔서 감사합니다. 그것은 작동한다. –