2017-11-05 16 views
0

비즈니스 로직을 Main.qml에두고 UI를 MainForm.ui.qml에 넣으려고했지만 위젯 ID로 연결할 수 없습니다.QT/QML 비즈니스 로직이 UI에서 분리되었습니다

MainForm.ui.qml :

import QtQuick 2.8 
import QtQuick.Controls 2.2 
import QtQuick.Layouts 1.3 

Page { 
    id: page 
    header: TabBar { ... } 
    StackLayout { 
     id: stack 
     Pane { 
     Flow { 
      TextField { 
       id: theText 
      } 
      property alias sendBtn: sendBtn 
      Button { 
       id: sendBtn 
      } 
     } 
     } 
    } 
} 

Main.qml :

import QtQuick 2.8 
import QtQuick.Window 2.2 

Window { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 
    MainForm { 
     anchors.fill: parent 
     sendBtn { 
     onClicked: backend.sendTextToServer(theText.text) 
     } 
    } 
} 

Qt는 창조주는 말한다 :

QQmlApplicationEngine failed to load component 
qrc:/Main.qml:12 Cannot assign to non-existent property "sendBtn" 

답변

1
: Invalid property name "sendBtn" (M16)

실행은 다음과 같은 메시지와 함께 실패

창 안쪽에 property alias sendBtn: sendBtn을 넣으면 Pane 속성으로 해석되므로 사용자는 그런 방식으로 액세스 할 수 없으므로 페이지 컨텍스트에 배치하는 것이 옳습니다.

import QtQuick 2.8 
import QtQuick.Controls 2.2 
import QtQuick.Layouts 1.3 

Page { 
    id: page 
    property alias sendBtn: sendBtn 
    property alias theText: theText 
    header: TabBar { ... } 
    StackLayout { 
     id: stack 
     Pane { 
     Flow { 
      TextField { 
       id: theText 
      } 

      Button { 
       id: sendBtn 
      } 
     } 
     } 
    } 
}