Russian Qt Forum

Qt => Qt Quick => Тема начата: oreons от Июль 25, 2016, 11:15



Название: #ifdef в QML
Отправлено: oreons от Июль 25, 2016, 11:15
Есть проект с запуском в QT4 (для WinCE) и QT5 (для Android).
В С++ все решается #ifdef, а в QML файлах не нашел таких операторов.
Например, в заголовке QML файла в QT4 нужна строка "import QtQuick 1.1", а в QT5 "import QtQuick 2.1"
Также могут быть отличия внутри файлов, используются разные компоненты.
Есть ли похожие на #ifdef конструкции в QML?


Название: Re: #ifdef в QML
Отправлено: Отражение луны от Июль 26, 2016, 00:56
В qml все наоборот, удобнее/современнее.
Ты просто указываешь версию и используешь языковые конструкции, соответствующие этой версии, и никак не наоборот. Каждый qml файл при этом может использовать свои собственные версии импортов. То есть ты не обязан импортировать одну версию  QtQuick 2.1 во всех файлах.
Таким боком никакой ifdef попросту не нужен, ты всегда заранее знаешь что используешь.
Но 1 и 2 qtquick попросту не совместимы. Так что не совсем понимаю что должно получится в итоге)


Название: Re: #ifdef в QML
Отправлено: oreons от Июль 26, 2016, 10:57
Цитировать
Но 1 и 2 qtquick попросту не совместимы. Так что не совсем понимаю что должно получится в итоге)
Большинство из 1 совместимо с 2. А что несовместимо, как раз и хотелось бы отделить #ifdef.
Проект изначально на 1, переносится на Андроид. Там внутри много логики на js.
Изменения в основном с заголовками и немного внутри файлов. Делать 2 версии файлов qml нет смысла.
Пока придумал только генерировать новые файлы из исходных с подстановкой нужных значений перед загрузкой qml.


Название: Re: #ifdef в QML
Отправлено: Отражение луны от Июль 28, 2016, 23:18
Нету никакого ифдефа. Лучшее, что можно в этой ситуации сделать - пробросить в энвайромент переменную и использовать Qt.createQmlObject, который позволяет создать объект из строки. В нем можно собственно описать компоненты, которые потом создавать через Component.createObject (честно говоря, не проверял, и не уверен, что это сработает). Короче максимум костылей, нужно копать в сторону c++.


Название: Re: #ifdef в QML
Отправлено: BuRn от Август 01, 2016, 20:29
Есть проект с запуском в QT4 (для WinCE) и QT5 (для Android).
В С++ все решается #ifdef, а в QML файлах не нашел таких операторов.
Например, в заголовке QML файла в QT4 нужна строка "import QtQuick 1.1", а в QT5 "import QtQuick 2.1"
Также могут быть отличия внутри файлов, используются разные компоненты.
Есть ли похожие на #ifdef конструкции в QML?

Сделай себе что-то типа брендирования. Те компоненты которые отличаются грузи лоадером, а в лоадере определяй что тебе грузить относительно ифдефа который ты сделаешь плюсовой функцией


Название: Re: #ifdef в QML
Отправлено: oreons от Август 04, 2016, 17:48
Спасибо за ответы. Сделал простой вариант, беру qml файлы и прогоняю по ключевым словам и подменяю на нужные. Немного замедляет запуск, но не критично.

Код:
import QtQuick #<qtquick_ver>#
#<comment1># import QtQuick.Window 2.2
#<comment1># import QtMultimedia 5.4

qtquick_ver заменяю на нужный номер версии
comment1 в quick 1 заменяю на //