Предоставление компонентов QML друг другу в Qt Creator - PullRequest
0 голосов
/ 02 октября 2018

Я занимаюсь разработкой приложения для панели мониторинга с использованием Qt-Quick с PySide2 и испытываю трудности с отображением компонентов QML в режиме конструктора Qt Creator.

Структура моей папки выглядит примерно так:

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
    }

}

Проблема в том, что я не могу видеть компоненты из myapp/components на вкладке Мои компоненты QML , когда я открываю файл page.qml (или любой другой файл .qml в каталоге-родственнике) в Qt Creator -> Design .

Все компоненты доступны для app.qml

Но не в page1.qml

Как я могу предоставить myapp/components файлам .qml, расположенным в одноуровневых каталогах, без изменения структуры папок моего проекта?

Редактировать 1: Я уже прочитал Документы относительно designer.metainfo, но все они, кажется,плагин плагин приложений, которые не являются моими.Поэтому мне трудно заставить их работать для моего случая использования.

1 Ответ

0 голосов
/ 30 октября 2018

Конструктор показывает только компоненты из текущих каталогов или из использованного импорта (который может быть плагином c ++, но также и qmldir с некоторыми компонентами qml).Таким образом, вам нужно создать импорт и каким-то образом добавить его в загруженный проект - не уверен, что использует pyside, но, возможно, будет хорошей идеей создать файл myapp.qmlproject для всего необходимого для qml материала и внутри:

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"
        }
    }
}

enter image description here

К сожалению, вы должны закрыть и снова открыть проект, чтобы увидеть результат.

Я подготовил небольшой пример здесь

...