Qt6 против Qt5: Qt.createQmlObject() сломан встроенными компонентамиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Qt6 против Qt5: Qt.createQmlObject() сломан встроенными компонентами

Сообщение Anonymous »

Я переношу свое приложение с Qt5 на Qt6, но кажется, что Qt.createQmlObject() больше не работает со встроенными компонентами.
Я загружаю QML из ZIP-архивов во время выполнения, и у меня есть реализация декомпрессора на C++, который динамически читает архивы и предоставляет контент без каких-либо временных файлов. Этот небольшой фрагмент представляет механизм, и он прекрасно работает в Qt5, но совершенно не работает в Qt6:

Код: Выделить всё

window.qml:32: Error: Qt.createQmlObject(): failed to create object:
file://inline:7:9: Type MyComp unavailable
file://inline: No such file or directory

Код: Выделить всё

window.qml
:

Код: Выделить всё

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
width: 300
height: 300
visible: true

function qmlFromZip() {
return `
import QtQuick 2.15

Item {
anchors.fill: parent

component MyComp: Rectangle {
color: "red"
radius: 10
}

MyComp {
anchors.centerIn: parent
width: 100
height: 100
color: "green"
}
}
`;
}

Component.onCompleted: {
const obj = Qt.createQmlObject(qmlFromZip(), this);
obj.anchors.centerIn = this;
}
}
Хотя Qt.createQmlObject() считается чрезвычайно медленным, в моем случае это не проблема. И мне бы очень хотелось избегать использования Loader или каким-либо образом существенно изменять QML или создавать какие-либо временные файлы в файловой системе.
Интересно, является ли это ошибкой Qt6, поскольку я не смог найти это изменение, упомянутое в документации Qt.createQmlObject() при сравнении Qt5 и Qt6. В противном случае было бы здорово увидеть где-нибудь официальное заявление об этой поломке.

Подробнее здесь: https://stackoverflow.com/questions/798 ... components
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»