Новость из категории: Информация

Космическая одиссея Qt 5 глазами программиста на C++

СОДЕРЖАНИЕ:
1. Первые впечатления (ВЫ ЧИТАЕТЕ ДАННЫЙ РАЗДЕЛ);
2. Изменения в C++ API и модулях;
3. Сборка.
Космическая одиссея Qt 5 глазами программиста на C++

Статью про Qt 5 я вынашивал давно, еще до выпуска этой самой пятой версии, когда она только планировалась и разработчики Qt5 огорчили хардкорных программистов на C++ сообщением, что Qt Quick стал «гражданином первого класса».

То, что происходило с библиотекой Qt в последние годы, волновало всех, кто связал свои программы с этой уже не просто библиотекой, а настоящей платформой.

Пожалуй, только команда KDE излучала оптимизм и на ура принимала крен Qt в сторону технологии Qt Quick, где вместо кода на С++ предлагается писать код на диалекте javascript -QML, а игрушечный, заточенный под мобильные устройства интерфейс, строить в графическом WYSIWYG-редакторе.

Сам Qt Quick вошел в состав Qt в 2010 году, и случилось это не просто так, а когда Qt разрабатывалась под «крылом» Nokia. Nokia собиралась поставить Qt в основу программирования для системы Symbian.

Все силы были брошены, в буквальном смысле, на «мобилизацию» Qt. Думал ли кто-то о программистах, использующих С++? Что нового для них появилось тогда в Qt? Не так уж много...



Спустя всего год Nokia отказывается от развития системы Symbian. Однако разработка Qt продолжает катиться на «мобильных» рельсах: разработчики Qt не слышат аргументов сообщества программистов. Когда Qt была продана компании Digia, направление разработки осталось прежним. И вот в декабре 2012 года вышла Qt 5 (http://blog.qt.digia.com/blog/2012/12/19/ qt-5-0).

Первые впечатления

Я познакомился с Qt 5 намного раньше, еще в альфа-версии, чтобы заранее внести в исходники своих программ нужные изменения. Разработчики Qt обещали гибкость при сборке, модульность.

Модульность хромала: например, по документации (даже к ветке 4.х), WebKit можно отключить параметром -no-webkit, но затем оказывалось, что этот параметр не работает, надо использовать --no-webkit, но и он не срабатывал, и приходилось править исходники файлов настроек сборки. А между тем именно WebKit - главный тормоз сборки Qt и главный виновник неудачных попыток сборки. А ведь не всем он нужен.

Перед выпуском Qt 5 разработчики честно предупредили, что API будет «поломан» и что к нему придется адаптировать код. Хорошо, ничего страшного: опишите изменения, а мы приспособим код.

Программистам предоставили два документа: C++ API changes (http://qt-project.org/doc/ qt-5.0/qtdoc/sourcebreaks.html) и Porting C++ Applications to Qt 5 (http://qt-project.org/doc/qt-5.0/ qtdoc/portingcppapp.html), а также общий The Transition from Qt 4.x to Qt 5 (http://qt-project.org/ wiki/Transition from Qt 4.x to Qt5) с описанием изменений (документацию по изменениям QML я игнорирую, но вообще она тоже существует).

Однако сведений из этих документов для успешного портирования программы с Qt4 на Qt5 недостаточно. И речь идет не о мелочах!

Например, поддержка печати не работает, пока в qmake-файл не добавить строку:
QT += printsupport

Вообще для qmake-файлов, совместимых с обеими версиями Qt, полезно писать так:
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
QT += printsupport } else {
#QT += blah blah blah
}

Если основная версия больше 4, добавляем модули widgets и printsupport, иначе - ничего не делаем или выполняем нечто специфичное.

Другой момент, который кратко документировали, - исчезновение макро-определения Q_WS_WIN. Испокон веков в C++/Qt для участков кода, который требовалось собрать под Windows, использовалась проверка, определен ли Q_WS_WIN.

Выглядело это вот так:
#if defined (Q_WS_WIN)
//код для Windows
#else
//другой код
#endif

В Qt 5 вместо Q_WS_WIN надо использовать Q_OS_WIN. Почему не оставить и Q_WS_ WIN? Ведь многие программы будут «молча» скомпилированы с кодом, заточенным под другую систему. Как и чем это аукнется, пока программисты конкретной программы не спохватятся, сказать трудно.

Рейтинг статьи

Оценка
3/5
голосов: 9
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх