Используйте Qt5Compat.Графические эффекты в Qt6 и графические эффекты в Qt5 в одном файле QML

#qt #qml #qtquick2 #qtquickcontrols2 #qt6

Вопрос:

У меня есть файл QML, первоначально написанный на Qt5, я переношу его на последнюю версию QtQuick.Управляет версией 2, и я также делаю ее совместимой с Qt6.

Мне нужно продолжать поддерживать Qt5, но я не смог найти способ импорта Qt5Compat.GraphicalEffects , когда приложение построено с помощью Qt6 и QtGraphicalEffects когда используется Qt5.

Есть какие-нибудь идеи?

Комментарии:

1. В скольких файлах вы импортируете этот модуль? Если это в нескольких модулях, вы могли бы создать 2 . qml, где первый из них действителен для Qt5, а другой для Qt6, а затем вы включаете его в .pro или CMakeLists.txt в зависимости от версии Qt.

2. Вы имеете в виду наличие двух версий моего компонента?

Ответ №1:

К сожалению, в QML нет ничего подобного:

 #ifdef QT6 
  import Qt5Compat.GraphicalEffects
#else
  import QtGraphicalEffects
#endif
 

Поэтому лучшая альтернатива, которую я нашел, — это использовать QQmlFileSelector. Для этого потребуется две версии вашего компонента, но вашему приложению не нужно знать, что существует две версии. Правильная версия будет выбрана автоматически.

Вы можете добавить свой селектор (например, «qt6»), а затем создать файлы qml в структуре файлов, подобной этой:

 qml/MyComponent.qml
qml/ qt6/MyComponent.qml
 

Комментарии:

1. Это так печально :(, Я попытаюсь сгенерировать эти файлы qml из одной версии, используя скрипт или что-то в этом роде