6
     ...<other code>
     MouseArea
      {
        anchors.fill: parent

        onClicked:
        {
          console.log ("You clicked on tab!");


          TabContainers.tabClicked (index);
        }
      }
     ...<other code>

ファイル内のこのコードX.qml。という名前の別のファイルには、 という名前TabContainers.qmlの関数が含まれていますtabClicked

その関数を file で呼び出したいX.qmlので、試しました:
TabContainers.tabClicked (index);

これにより、エラーが発生しました:
ReferenceError: TabContainers is not defined

QMLファイルで定義された関数を別のQMLファイルで呼び出す方法は?

アップデート:


これは私が試したものです:

TestB.qml

import QtQuick 2.0

Rectangle 
{
  id: myItem
  width: 100; height: 100

  function f ()
  {
    console.log ("sadsad");
  }
}

TestA.qml

import QtQuick 2.0

Item 
{
  width: 100; height: 100

  Loader 
  {
    id: myLoader
    source: "TestB.qml"
  }

  Connections 
  {
    target: myLoader.f()
  }
}

私が得るエラーは次のとおりです。
TestA.qml:15: TypeError: Object [object Object] has no method 'f'

4

2 に答える 2

3

ここから:

これの代わりに:

myLoader.item.f()

私はむしろこのように呼んf()でいました:myLoader.f()

于 2013-10-17T06:27:37.020 に答える
2

TabContainers現在の QML にインスタンスをロードし、関数を呼び出す必要がありますtabClicked()

TabContainersインスタンスがアプリケーションの別の QML ファイルにロードされている場合、signal共通の祖先の 1 つで を定義し、 Connectionsコンポーネントを使用してシグナルを送信しX.qml、キャッチすることもできます。TabContainers.qml

TabContainersインスタンスがロードされている場所の親にロードされている場合、インスタンスX.qmlの ID を参照しTabContainersて関数を呼び出すこともできます。

2 番目のソリューションの例

親.qml

import QtQuick 2.0

Rectangle 
{
  id: rootItem
  width: 300; height: 300

  signal handleTabClicked(int value);

  A {
    id: myElemA
    anchors.left: parent.left
  }

  B {
    id: myElemB
    anchors.right: parent.right
  }
}

A.qml

import QtQuick 2.0

Rectangle 
{
  id: myItem
  width: 80; height: 80
  color: "yellow"

  Connections {
    target: rootItem
    onHandleTabClicked: {
      f();
    }
  }

  function f ()
  {
    console.log ("sadsad");
  }
}

B.qml

import QtQuick 2.0

Rectangle 
{
  id: myItem
  width: 150; height: 150
  color: "red"
  MouseArea {
    anchors.fill: parent
    onClicked: {
      rootItem.handleTabClicked(4);
    }
  }
}
于 2013-10-16T10:15:10.330 に答える