2016-11-07 8 views
-1

아래 내가로드 된 파일에 상주 mousearea을 구현하기 위해 지금 내가이를 동적 객체 생성 방법을 사용하여 QML UI를로드하고있어 내 코드입니다, 사람이qml의로드 된 양식에서 mouseclick 영역을 사용하는 방법?

Qt.createQmlObject(" import QtQuick 2.0 

    Loader { 
     id: pageLoader 
     source: '/HomeScreenForm.ui.qml' 
     anchors.fill: parent 
     anchors.rightMargin: 0 
     anchors.leftMargin: 0 
     anchors.bottomMargin: parent 
     anchors.topMargin: parent 

     } 


     ", rectangle7) 
+1

'연결'유형을 사용하여 신호 및 기능을 다른 신호에 연결할 수 있습니다. http://doc.qt.io/qt-5/qtqml-syntax-signals.html#using-the-connections-type 추가 도움이 필요하면로드 된 파일의 스케치 업이 필요합니다. – derM

+1

'createQmlObject'를 사용하여'Loader'를 만드는 것이 얼마나 좋은가요? 대신에'Qt.createComponent'를 사용하십시오. – folibis

+0

createQmlObject를 사용하는 이유는 rectangle7에 qml 파일을로드하고로드 된 파일 ui가 응답해야합니다. @folibis – jay

답변

1

만들기 사용자 정의 항목이 MouseArea이 포함되어 나를 어떻게 도움이 될 수 있습니다 . 당신은 예를 들어, alias을 사용할 수 있습니다 외부에서 영역에 액세스 할 수 있도록하려면

MyItem.qml

import QtQuick 2.7 

Rectangle { 
    id: root 
    color: "yellow" 
    property alias area: mouseArea 

    MouseArea { 
     id: mouseArea 
     anchors.fill: parent 
    } 

    Text { 
     anchors.centerIn: parent 
     text: "Click me!" 
    } 
} 

그리고 당신은 동적으로 생성 할 수있는 또 다른 방법이 사용

import QtQuick 2.7 
import QtQuick.Window 2.0 

Window { 
    id: mainWindow 
    width: 600 
    height: 600 
    visible: true 

    Component.onCompleted: { 
     var component = Qt.createComponent("MyItem.qml"); 
     if (component.status === Component.Ready) { 
      var obj = component.createObject(mainWindow); 
      obj.width = 200; 
      obj.height = 200; 
      obj.anchors.centerIn = mainWindow.contentItem; 
      obj.area.onPressed.connect(
        function(mouse){ 
         console.log("pressed at (", mouse.x,",",mouse.y,")") 
        }); 
     } 
    } 
} 

Connections, @derM은 이미 알아 챘습니다.

+0

니스, 나는 별칭 - 대상으로 ID를 설정할 수 있다는 사실을 알지 못했습니다. 이것은 내 인생을 더 쉽게 만들 것입니다! – derM

+0

고맙습니다. – jay

+0

왜 이것이 CreateObject()를 통해 일회성 일회성로드가 필요한지 잘 모르겠습니다.이 작업은 맨 위의로드 온 디맨드, 언로드 등을 허용하는'Loader'로 쉽게 수행 할 수 있습니다. 멋지게 선언적 인 –