Внешний бинарный ресурс открыт, но не существует в QML

У меня есть следующее main.qml файл:

import QtQuick 2.5
import QtQuick.Controls 1.4

Item
{
anchors.centerIn: parent

Label
{
id: textLabel
anchors.fill: parent
x: 200
y: 400
}

CustomObject
{
id: customObjectId
}
}

CustomObject это QML файл, определенный во внешнем двоичном ресурсе, сгенерированный rcc команда:

rcc -binary -o redTheme.qrc redTheme.rcc

CustomObject.qml

import QtQuick 2.5
import QtQuick.Controls 1.4

Item
{
Rectangle
{
width: 200
height: 120
color: "blue"Label
{
text: "customObject"}
}
}

в C++ сторона, я регистрирую свой ресурс так:

QResource::registerResource(QCoreApplication::applicationDirPath() + "/data/themes/redTheme.rcc");

Функция возвращает true, что означает, что файл открыт.

Еще, CustomObject не существует в моем main.qml файл. Зачем?

CustomObject is not a type

РЕДАКТИРОВАТЬ: Я завернул CustomObject в QML Module а затем скомпилировал его в .rcc файл (это означает, что qmldir файл находится внутри .qrc). Нет никакой разницы, CustomObject по-прежнему не распознается как тип, даже если я добавлю import заявление (import redTheme 1.0). Содержание моего qmldir файл:

module redTheme
CustomObject 1.0 CustomObject.qml

-1

Решение

Я не уверен на 100%, но я думаю, что файлы QML как типы работают только для «внутренних» файлов QML, то есть файлов QML, которые находятся во внутреннем файле ресурсов.

Чтобы внешние файлы QML работали как типы, вам нужно определить действительный модуль QML с его qmldir файл и тому подобное. Также возможно представить его как тип с использованием API C ++, но я не исследовал его, в основном, это то, что qmldir анализатор файлов делает.

Другой способ использовать внешние файлы QML — это путь / URL, то есть, если вы хотите, чтобы он был создан, вам нужно либо использовать Loader или вручную создать его динамически.

Это может помочь зарегистрировать внешние файлы QML как типы QML:

int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

Эта функция регистрирует тип в системе QML с именем
qmlName, в библиотеке, импортированной из URI, имеющей номер версии
составлено из версии Мажор и версии Минор. Тип определяется
файл QML, расположенный по адресу URL-адрес должен быть абсолютным URL, т.е.
url.isRelative () == false.

Обычно файлы QML могут быть загружены как типы непосредственно из другого QML
файлы или используя файл qmldir. Эта функция позволяет регистрировать
файлы для типов из кода C ++, например, когда необходимо сопоставление типов
быть процедурно определенным при запуске.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]