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

jon*_*ham 24 c++ qt components include qml

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

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

这些屏幕共享标题栏下方的相同工具栏.工具栏有多个项目,因此复制粘贴QML代码就像疯了一样.这个问题:QML文件包含 - 或者一个单片文件(结构QML代码)?说可以只使用QML文件名作为组件名称,但我无法使其正常工作.

有解决方案吗 详情请参阅.

koo*_*jah 35

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

// in Main.qml
Rectangle {
  id: root
  MyCustomText {
    text: "This is my custom text element"
  }
}
Run Code Online (Sandbox Code Playgroud)

如果MyCustomText.qml在另一个子目录中MyComponents,例如将所有自定义组件组合在一起,import则在使用组件之前,首先需要使用该目录:

// in Main.qml
import "MyComponents"

Rectangle {
  id: root
  MyCustomText {
    text: "This is my custom text element"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对于Qt 5.3,如果在QRC文件中创建另一个前缀,则可以使用`import'qrc导入该前缀:/ anotherComponents` (2认同)

jon*_*ham 6

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

projectdir/
  qml/
    projectname/
      main.qml
      mycomponent.qml
Run Code Online (Sandbox Code Playgroud)

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

Text {
  text:"Hello, Scooby Doo!";
}
Run Code Online (Sandbox Code Playgroud)

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

Rectangle {
  ...
  Loader {
    source:"mycomponent.qml";
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)