Как мне создать свой собственный каталог в QT QML? - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь создать каталог для одноэлементного файла QML «All.qml», который я могу импортировать в любом другом месте в свой проект, чтобы я мог получить доступ к его объектам (а именно, ящику). Я создал файл qmldir в той же папке, что и «All.qml», и даже добавил каталог в файл .qr c. Содержимое каталога выглядит следующим образом:

Module App.Drawer

singleton All  1.0 All.qml

Но когда я набираю

import App.Drawer.   1.0

, он говорит: «Модуль 'App.Drawer' не установлен». Я не могу найти другого способа получить доступ к этому ящику, поскольку проект огромен с несколькими папками и каталогами. Может кто-нибудь помочь мне?

Кроме того, в этот проект интегрирован C ++. Я попытался найти какой-нибудь файл, в котором, возможно, были установлены другие каталоги (есть и другие настраиваемые каталоги, которые были созданы заранее), но не нашел ни одного.

1 Ответ

0 голосов
/ 28 мая 2020

Вы должны убедиться, что QEngine может найти файл qmldir, и что у него есть определенные c требования к тому, где он будет искать.

Сначала, чтобы QEngine узнал о qmldir файл, вы должны добавить путь импорта:

engine.addImportPath("qrc:/");

Ваш путь может отличаться, читайте дальше:

Файл qmldir должен быть помещен в структуру папок, определяемую модулем название. В вашем случае это <rootPath>/App/Drawer/qmldir. «RootPath» мне неизвестен, но предположим, что в вашем qr c файле есть следующее:

<RCC>
    <qresource prefix="/ProjectX/App/Drawer">
        <file>Drawer.qml</file>
        <file>qmldir</file>
    </qresource>
</RCC>

Тогда «rootPath» будет qrc:/ProjectX, а вызов импорта станет:

engine.addImportPath("qrc:/ProjectX");

Кроме того, объявление module в qmldir должно совпадать со структурой папок, в которой размещен файл qmldir. (И я думаю, что он должен быть в нижнем регистре)

module App.Drawer

singleton Drawer 1.0 Drawer.qml

Если вы хотите, чтобы Qt Creator также нашел материал, вы можете использовать переменную среды QML2_IMPORT_PATH и установить ее в правильную папку, используя ту же самую логи c.

Вы также можете поместить файлы в <Qt_installation_folder>/qml/App/Drawer, но это означает, что каждый проект может использовать его, и вы должны поддерживать его в актуальном состоянии во время разработки, что может быть чрезмерным.


Редактировать

Чтобы увидеть, правильно ли выровнены ваши файлы, вы можете добавить этот отладочный код:

QDirIterator it(":", QDirIterator::Subdirectories);
while (it.hasNext()) {
    qDebug() << it.next();
}
...