Название: #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># qtquick_ver заменяю на нужный номер версии comment1 в quick 1 заменяю на // |