В сети уже давно циркулируют слухи, а точнее миф о том, что Qt перейдёт с С++ на QML, и весь код, написанный на С++ якобы будет объявлен deprecated. Эти слухи появились из статьи Ларса Нолла опубликованной здесь. Из этой статьи следует следующее:
От себя добавлю несколько гадостей о QML (если быть точным, то о Quick), которые могут предотвратить ваш переход на него:
- Qt5 поддерживает и будет поддерживать C++ widgets, они не будут объявлены derprecated;
- C++ виджеты объявлены как законченный модуль, новые возможности на данный момент никто не добавляет, но это не значит, что он заброшен и deprecated;
- QML - дополнительный способ создания приложений;
- QML - технология, ориентированная на будущее;
От себя добавлю несколько гадостей о QML (если быть точным, то о Quick), которые могут предотвратить ваш переход на него:
- QML - довольно простая и ограниченная технология, сложные проекты будут представлять собой спагетти из QML и C++;
- QML зависит от 2d-ускорения и качества видеодрайверов. Не удивляйтесь, что ваше окошко при быстром перемещении по рабочему столу начнёт чудовищно искажаться - это вина драйверов, то есть то, что вы не сможете починить. При отсутствии 2d-ускорения QML начинает серьёзно тормозить;
- В QML до сих пор нет некоторых виджетов, которые вы использовали в C++, например дерева или диалогов. Вам придётся искать сторонние варианты реализации таких компонентов, либо писать их самим;
- В QML компонентах, которые отображают данные, вроде TableView, нет поддержки сортировки, вам придётся в С++ коде создавать объект QSortFilterProxyModel с нужными переопределёнными виртуальными методами, и экспортировать его в QML;
- В QML нет простого способа импортировать сложные С++ объекты, вам придётся писать дополнительный С++ код-обёртку чтобы передать сложный объект в QML;
- периодически вы будете сталкиваться с разными недочётами и пользоваться костылями для их обхода (например, массивы в ListElement);
- в QML нельзя передать любой enumerator из C++. Для этой операции вам потребуется выполнить несколько условий, а именно: 1) enum должен быть объявлен внутри QObject класса 2) внутри этого же класса должны быть объявления Q_OBJECT и Q_ENUMS(). Если вы используете чужие заголовочные файлы с enum-ами, то как вы сами понимаете, сделать их доступными в QML не получится. Самый прямой способ - дублирование объявления значений из enum-a в QML. Самый кривой - различные хаки с moc, работоспособность которых мне, к сожалению, неизвестна;
Комментариев нет:
Отправить комментарий