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 文件中定义的函数?

更新:


这是我尝试过的:

测试B.qml

import QtQuick 2.0

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

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

测试A.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在它们的共同祖先之一中定义一个并发出信号并使用Connections组件X.qml捕获它。TabContainers.qml

如果您的TabContainers实例加载到加载位置的父级中,X.qml您还可以引用TabContainers实例的 id 来调用该函数。

第二种解决方案的示例

父.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
  }
}

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 回答