Цель состоит в том, чтобы придумать способ защитить ваш QML-код от плагиата. Это проблема, поскольку путь QML был разработан и реализован, кажется необъяснимо незащищенным в этом отношении. Единственные типы QML, которые несколько защищены, - это те, которые полностью реализованы на C++.Защита исходного кода QML от плагиата
- файлов ресурсов Qt не поддерживают какую-то степень защиты
- даже если сжать файл ресурсов, извлечение данных из него еще довольно тривиальна для любого с умеренным опытом
- QML файлы, хранящиеся на файл система практически существует для принятия
- То же самое относится к любым удаленным файлам QML, помимо добавления зависимости от интернет-соединения, легко обнюхать доступ к сети и получать файлы QML через свои URL-адреса
- QML doesn ' t предоставляют, казалось бы, любые публичные API, чтобы позволить пользователям достаточно контроля над разрешением типа QML, чтобы защитить свой код
В общем, это выглядит почти как Qt намеренно skimps на защиту QML кода, один очевидный кандидат причина будет заставить людей в покупке безумно выразительной коммерческая лицензия, в которой используется компилятор QML.
Отсутствие какого-либо метода запаса для защиты источников QML, единственное решение, которое в настоящее время приходит мне на ум, - это контроль над тем, как разрешаются типы QML. Есть несколько способов регистрации типов в QML:
- регистра в исполняемом файле приложение
- регистра в плагине
- регистра через модуль QML
Однако, что мне нужно вручную разрешить типы QML, так же, как вы можете создать пользовательский QQuickImageProvider
, который вводит строку URL-адреса и выводит изображение, мне нужен механизм QML, чтобы запросить строку с типом моего пользовательского поставщика компонентов, который выводит компонент готовности к компоненту объекта.
Это было бы легко, если бы использовался какой-либо пользовательский механизм создания экземпляра, но мне нужны эти типы, которые можно использовать в обычных источниках QML. В идеале это должен быть первый механизм, используемый для разрешения типа, прежде чем искать доступные пути импорта или даже внутренние зарегистрированные типы.
В качестве альтернативы, было бы также полезно, если бы был способ полностью определить QML-модуль полностью на C++ без каких-либо внешних файлов QML без файла qmldir
и так далее.
В крайнем случае, и, в идеале, я не согласен с регистрацией типов QML (не C++), это также может быть полезно, но я бы предпочел иметь полный контроль над процессом разрешения ,
Плагин QML не выполняет трюк, так как он регистрирует типы C++, и я хочу зарегистрировать типы QML, то есть QQmlComponent
s, созданные из источников строк и ссылающихся друг на друга.
Итак, вы хотите загрузить компонент из символьной строки в памяти, содержащей некоторый исходный код QML? Это функция 'QQmlComponent :: setData'. – Velkan
@Velkan - далеко от него. Я хочу зарегистрировать компоненты как типы QML для использования в декларативном QML-коде. Или более точно, я хочу иметь 'SomeType {...}' в QML и иметь ручное управление, чтобы связать «SomeType» с компонентом QML. – dtech
Возможно, 'Loader {sourceComponent: someType1; ... (свойства элемента)} 'и измените' sourceComponent' на то, чтобы указывать на правый компонент. Изменение значения 'SomeType {}' не выглядит многообещающим, потому что идентификатор типа определяется во время компиляции QML (http://www.kdab.com/qml-engine-internals-part-1-qml-file -loading /). – Velkan