首页 > 解决方案 > 在 Qt Creator 中相互公开 QML 组件

问题描述

我正在使用 Qt-Quick 和 PySide2 开发仪表板应用程序,并且在 Qt Creator 的设计模式下公开我的 QML 组件时遇到了麻烦。

我的文件夹结构如下所示:

myapp/
├── mycomponents
│   ├── component1.qml
│   └── component2.qml
│   └── etc..
├── pages
│   ├── page1.qml
│   └── page2.qml
└── app.qml

我可以myapp/mycomponents通过导入适当的 .qml 文件或使用相对路径的父目录来使用所有组件:

// inside page1.qml

import "../mycomponents"

Item {
    id:page1

    MyComponent1 {
        // some code
    }

}

问题是当我在Qt Creator --> Design中打开一个(或同级目录中的任何其他 .qml 文件)文件时,我无法myapp/componentsMy QML Components选项卡中看到组件。page.qml

app.qml 可用的所有组件

但不在 page1.qml

如何 myapp/components 在不更改项目文件夹结构的情况下公开位于同级目录中的 .qml 文件?

编辑 1: 我已经阅读过有关的文档designer.metainfo,但它们似乎都指的是插件应用程序,而我的不是。所以我很难让这些工作适合我的用例。

标签: pythonqmlqtquick2pyside2

解决方案


设计器仅显示来自当前目录或使用过的导入的组件(可以是 c++ 插件,也可以是带有一些 qml 组件的 qmldir)。因此,您必须创建一个导入并以某种方式将其添加到加载的项目中 - 不确定 pyside 使用什么,但也许为所有 qml 内容和您需要的内容创建一个 myapp.qmlproject 文件是个好主意:

importPaths: [ "." ]

然后在 mycomponents 目录中,您需要一个 qmldir 文件

Component1 1.0 Component1.qml

此外,您需要包含文件 mycomponents.metainfo 的设计器目录

MetaInfo {
    Type {
        name: "Component1"

        ItemLibraryEntry {
            name: "a Test Component1"
            category: "mycomponents"
            version: "1.0"
            requiredImport: "mycomponents"
        }
    }
}

在此处输入图像描述

不幸的是,您必须关闭并重新打开项目才能看到结果。

我在这里准备了一个小例子


推荐阅读