包含QML文件中的另一个QML文件

时间:2014-03-04 09:54:12

标签: c++ qt include components qml

还有关于此问题的另一个关于Stackoverflow的问题,但我找不到可接受的解决方案。所以我再问一遍,因为旧的问题没有引起人们的注意。

情况就是这样。我有由' main.qml',' feature1.qml',' feature2.qml'定义的应用程序屏幕。

这些屏幕共享标题栏下方的相同工具栏。工具栏有多个项目,因此复制粘贴QML代码就像疯了一样。这个问题:QML file include - or one monolithic file (structure QML code)?说可以将QML文件名用作组件名称,但我无法使其正常工作。

任何解决方案?详情请参阅。

6 个答案:

答案 0 :(得分:33)

假设您有一个名为main.qml的文件和另一个名为MyCustomText.qml的文件中的组件。如果两个文件都在同一目录中,则可以直接加载组件,如下所示:

// in Main.qml
Rectangle {
  id: root
  MyCustomText {
    text: "This is my custom text element"
  }
}

如果MyCustomText.qml位于另一个子目录MyComponents中,例如将所有自定义组件组合在一起,则首先需要import目录,然后才能以相同的方式使用该组件:

// in Main.qml
import "MyComponents"

Rectangle {
  id: root
  MyCustomText {
    text: "This is my custom text element"
  }
}

另一个需要注意的重要事项是,如果您希望能够以这种方式使用它们,则QML文件应始终以大写字母开头

当然,您的Loader解决方案也可以,但这是在其他组件中导入QML文件的最简单方法。

答案 1 :(得分:5)

最后我从互联网上挖出来了。假设这个目录结构中的待包含文件是'mycomponent.qml'(Qt Quick):

projectdir/
  qml/
    projectname/
      main.qml
      mycomponent.qml

'mycomponent.qml'的内容(例如):

Text {
  text:"Hello, Scooby Doo!";
}

我们必须以这种方式加载它(在'main.qml'中):

Rectangle {
  ...
  Loader {
    source:"mycomponent.qml";
  }
  ...
}

答案 2 :(得分:2)

See Qt documentation about reuseable components.

导入的QML文件定义了一个类型,其名称与文件名相同(大写,少于.qml后缀)。 QML将类型称为可重用组件。您可以使用该类型名称在导入QML文档(文件。)中实例化对象。

它不像C语言包含,其中包含文件的文本被插入到包含文件中。它更像是在Python中导入类的名称,然后在导入文件中实例化该类的对象。或者有点类似于Javascript,导入的文件正在创建原型对象,导入文件原型继承自它。除了注意关于根对象的讨论以及组件的哪些属性将是可见的(因为QML的文档范围。)您无法访问导入文件中的所有内容,就像它是C一样include,Python导入或JS继承。

答案 3 :(得分:0)

您可以调用qml的名称。 对于前。 我有2个qml文件。 main.qml和Merchant.qml

我刚刚给商人打电话。应该以智能感知来显示。

ApplicationWindow {
id: mainWindow
visible: true
Component{
    id: merchantsComponent
    Merchant{
        id: merchants
        width: mainWindow.width
        height: mainWindow.height
    }
}

}

您可以仅将其称为Loader

答案 4 :(得分:0)

您可以直接致电:

Window {
    id: mainWindow
    visible: true
    Feature1{}
}

像这样加载Feature1.qml

答案 5 :(得分:0)

那样很容易。将所有文件组件放入“组件”之类的文件夹中。您的文件名可以为Toolbar.qml。为您的工具栏编写QML代码,我的示例将绘制一个红色矩形。

 import QtQuick 2.6
    
    Item {
        width: 500
        height: 100
        Rectangle {
            width: 500
            height: 100
            color: "red"
            radius: width * 0.5
        }
    }

然后,在要使用此组件的屏幕(例如文件main.qml)中,就很简单:

import "components" as Components
        
       
Components.Toolbar {
    Layout.fillHeight: true
}

请注意文件的位置,在此示例中,所有组件仍应以大写字母开头:

\main.qml
\components\Toolbar.qml