Russian Qt Forum
Март 29, 2024, 01:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: #ifdef в QML  (Прочитано 6338 раз)
oreons
Гость
« : Июль 25, 2016, 11:15 »

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

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

Цитировать
Но 1 и 2 qtquick попросту не совместимы. Так что не совсем понимаю что должно получится в итоге)
Большинство из 1 совместимо с 2. А что несовместимо, как раз и хотелось бы отделить #ifdef.
Проект изначально на 1, переносится на Андроид. Там внутри много логики на js.
Изменения в основном с заголовками и немного внутри файлов. Делать 2 версии файлов qml нет смысла.
Пока придумал только генерировать новые файлы из исходных с подстановкой нужных значений перед загрузкой qml.
Записан
Отражение луны
Гость
« Ответ #3 : Июль 28, 2016, 23:18 »

Нету никакого ифдефа. Лучшее, что можно в этой ситуации сделать - пробросить в энвайромент переменную и использовать Qt.createQmlObject, который позволяет создать объект из строки. В нем можно собственно описать компоненты, которые потом создавать через Component.createObject (честно говоря, не проверял, и не уверен, что это сработает). Короче максимум костылей, нужно копать в сторону c++.
« Последнее редактирование: Июль 28, 2016, 23:23 от Komorebi » Записан
BuRn
Гость
« Ответ #4 : Август 01, 2016, 20:29 »

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

Сделай себе что-то типа брендирования. Те компоненты которые отличаются грузи лоадером, а в лоадере определяй что тебе грузить относительно ифдефа который ты сделаешь плюсовой функцией
Записан
oreons
Гость
« Ответ #5 : Август 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 заменяю на //
« Последнее редактирование: Август 04, 2016, 17:50 от oreons » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.