Стратегия портирования кода на основе QDeclarative в Qt 5.6.0

Я пытаюсь добавить автономное приложение Qt QML ("новое приложение") в качестве отображаемого виджета в QMdiArea в большом приложении Qt, отличном от QML ("основное приложение"). Основное приложение, которое я пытаюсь добавить, использует Qt 5.6.0, а новое приложение использует Qt 4.8.

Моим первым шагом было получение компиляции "нового приложения" под Qt 5.6, но основное архитектурное изменение для приложений Qt QML между Qt 4 и Qt 5 поставило меня в тупик. Основное представление для "нового приложения" наследуется непосредственно от QDeclarativeView и интенсивно использует функциональные возможности QWidget и QGraphicsView.

Руководство Qt по переносу приложений QML с Qt4 на Qt5 ( http://doc.qt.io/qt-5/qtquick-porting-qt5.html), кажется, предлагает использовать устаревший декларативный модуль в качестве решения этой проблемы, но все исходного кода для QDeclarative был удален из qtquick1 с 5.6.0, и я не могу переключить "основное приложение" обратно на более раннюю версию Qt.

Я новичок как в Qt, так и в "новом приложении". Есть ли более простой способ приблизиться к этому, чем получить полное представление о "новом приложении" в том виде, в котором оно разработано в настоящее время, а затем прочитать как старую декларативную платформу, так и новую платформу qtquick и реструктурировать / переписать все, чтобы использовать новую платформу qtquick?

1 ответ

Усилия по портированию на QML2 сильно различаются в зависимости от того, сколько у вас пользовательских элементов и как вы взаимодействуете с декларативным представлением из основного приложения. В любом случае, я настоятельно рекомендую потратить время, чтобы на самом деле понять существующий код QML, прежде чем пытаться его портировать. Большая часть кода переноса часто состоит только в замене QDeclarative* на QQuick*, но в конечном итоге вам придется столкнуться с частью QGraphicsView -> OpenGL портирования.

Для встраивания сцены QML2 в приложение QWidget QQuickWidget - это то, что вам нужно.

Я немного удивлен, что QtQuick1 полностью удален, а не устарел в qt 5.6. Если вы скомпилируете и отправите свой собственный набор инструментов, то повторное введение подмодуля qtquick1 не должно быть слишком большим усилием, поскольку в qt5.6 нет серьезных архитектурных изменений, которые мешают ему работать.

Другие вопросы по тегам