python - 在 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/components
在My QML Components选项卡中看到组件。page.qml
app.qml 可用的所有组件
但不在 page1.qml
如何 myapp/components
在不更改项目文件夹结构的情况下公开位于同级目录中的 .qml 文件?
编辑 1:
我已经阅读过有关的文档designer.metainfo
,但它们似乎都指的是插件应用程序,而我的不是。所以我很难让这些工作适合我的用例。
解决方案
设计器仅显示来自当前目录或使用过的导入的组件(可以是 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"
}
}
}
不幸的是,您必须关闭并重新打开项目才能看到结果。
我在这里准备了一个小例子
推荐阅读
- html - 一行中的多个 i 标签与多行
- javascript - 如何在momentJS中检测夏令时加减1小时
- reactjs - 每次运行创建反应应用命令?
- tensorflow - TensorFlow,使用map_fn迭代每一行并做计算任务
- php - 如何使用 mongodb 在 yii2 中编写原始查询
- java - 如何使用 AsyncTask(通过 POST 请求)将参数值发送到服务器并获取数据?
- android - 可以将一个 ViewModel 用于多个活动吗?
- python - 正确使用 numpy 与图像的卷积
- asp.net - 用户使用 OAuth2 登录后如何访问或获取 Providerkey
- c# - 从 C# 中的 mp4 文件中读取“媒体创建”日期