2016-11-07 24 views
-1

iは動的オブジェクトの作成方法を使用してQML UIをロードしています私のコードスニペットで誰も私がこのmouseclick areaをqmlのフォームに読み込む方法は?以下

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を実装する必要があり、カスタムアイテムは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で簡単に行うことができます。きれいに宣言的な –

関連する問題