Неофициальный перевод статьи A Taste of Qt 4 выполнен с любезного разрешения Trolltech.
C выходом Qt 3.3.0 серия Qt 3.x близится к завершению. Сейчас разработчики Trolltech сфокусировались на следующей версии Qt 4, которая выйдет позже в этом году. С выходом новой версии Qt мы надеемся сделать программирование более простым, быстрым и совершенным, чем это когда-либо было.
Qt позиционируется как серьезная альтернатива Java и как кросс-платформенная альтернатива платформо-зависимым API, таким как MFC и Windows Forms в Windows, Carbon в Macintosh и Motif в Unix. Уникальную позицию Qt занимает в Linux, и может рассматриваться как один из родных API этой системы.
Microsoft и Apple непрерывно совершенствуют концепцию пользовательского графического интерфейса, постоянно улучшают и упрощают процесс разработки программного обеспечения на своих платформах. Поэтому, чтобы не отстать, Trolltech старается также улучшать Qt по этим параметрам.
Вторая цель, которую преследует Trolltech - расширение функциональных возможностей и улучшение параметров эффективности (производительности и расхода памяти) Qt 4 по сравнению с предшествующими версиями библиотеки. В улучшении эффективности заинтересованы все пользователи Qt, особенно те, кто работают с Qt/Embedded, предпочитая версию Qt 2.3 версии Qt 3.x. Увеличение производительности и снижение расхода памяти сделает Qt 4 более пригодной для использования в графической среде Qtopia для наладонных компьютеров, а также уменьшит время запуска крупных настольных приложений.
Trolltech имеет положительный опыт эволюционного развития Qt с сохранением совместимости на уровне исходного кода. В Qt 4 появится отдельная библиотека расширений, которая будет опционально компоноваться с приложениями, использующими устаревшие классы Qt 3. Такая отдельная библиотека обеспечит более лучшую совместимость и предотвратит разрастание Qt из-за устаревшего кода.
Ниже перечислены наиболее важные возможности готовящейся к выходу Qt 4.
В Qt 3 Qt Designer и Qt Assistant использовались независимо от существующих средств разработки. В Qt 4 эти инструменты будут интегрированы в среды программирования. Изначально мы планируем поддерживать среды Visual Studio .NET, KDevelop и Xcode.
В карманных электронных устройствах, таких как мобильные телефоны и PDA, наблюдается переход от стандартных виджетов и стилей к более настраиваемому пользовательскому графическому интерфейсу. Система стилей Qt 4 будет использовать подобную технику создания графического интерфейса наряду с приемами немерцающей отрисовки и поддержкой прозрачности для стандартных и пользовательских виджетов.
Благодаря своему инновационному дизайну новая графическая подсистема Arthur позволит объединить архитектуры с пиксельной и векторной графикой. Примерами технологий, которые планируется поддерживать в Qt 4 изначально, являются Quartz и QuickDraw в Mac OS X, Xlib в X11, GDI в Windows, а также PostScript, SVG и OpenGL, с возможной поддержкой в будущем технологий Cairo, GDI+ и PDF. Такой гибкий многоцелевой дизайн подсистемы Arthur позволит сполна использовать все возможности различных графических систем, включая аппаратное ускорение, специализированные преобразования, сглаживание линий и шрифтов. Доступность тех или иных возможностей определяется автоматически.
Новая подсистема вывода текста под кодовым названием Scribe предоставляет API для высококачественного отображения уникодного текста со стопроцентным WYSIWYG. Она была полностью переписана с учетом требований многоязычной поддержки. Одной из наиболее заметных особенностей подсистемы Scribe является поддержка кернинга шрифтов (корректировка межбуквенного расстояния - прим. пер.) на всех платформах.
Новая архитектура "модель-вид" под кодовым названием Interview использует общую модель абстракции данных и управляемого GUI на основе таблиц, линейных и древовидных списков. При этом интерфейсы остаются быстрыми и отзывчивыми даже для больших структур данных.
Одни и те же данные могут обрабатываться несколькими видами одновременно. К тому же новые виджеты полностью поддерживают языки с чтением справа-налево.
В Qt 4 появился новый набор шаблонных классов под кодовым именем Tulip. Они проще, легче и безопаснее в использовании, чем стандартные STL-контейнеры. Программисты, незнакомые с STL или предпочитающие работать в "духе Qt", могут использовать эти классы вместо стандартных.
Новые шаблонные классы используют неявный совместный доступ, отлично работают с потоками и оптимизированы по характеристикам скорости, низкому расходу памяти и минимальному размеру кода подставляемых функций. Классы таких контейнеров, как QList, QVector, QMap, QHash и QStack поддерживают цикл foreach и Java-подобные итераторы. При этом, в отличие от Java, не требуется явное приведение типов. Это стало возможным благодаря шаблонам C++.
foreach (QString s, list)
sum += s.length();
QListIterator < QString > i(list);
while (i.hasNext())
sum += i.next().length();
QList < QString >::const_iterator i;
for (i = list.begin(); i != list.end(); ++i)
sum += (*i).size();
Qt 2 была в основном однопоточной библиотекой, и лишь несколько классов объединяли платформо-зависимый код поддержки потоков. В процессе работы над Qt 3 все больше и больше функций в библиотеке становились повторно входимыми (reentrant). В Qt 4 поддержка многопоточности вышла на новый уровень: стали возможными поточные циклы обработки сообщений, межпоточные связи сигнал-слот и потоко-безопасное (thread-safe) неявное совместное использование данных.
API Qt славится своим продуманным объектно-ориентированным дизайном и легкостью в использовании. В Qt 4 мы хотим сделать программные интерфейсы еще более последовательными и гибкими. Одним из способов достижения этой цели является уменьшение количества сущностей за счет объединения нескольких вместе. В качестве примера можно привести запутанное взаимодействие менеджеров компоновки и виджетов в Qt 3. То же самое справедливо для объектов QAction и элементов меню. В Qt 4 эти классы будут попарно объединены. Это упростит API и реализацию Qt. Вторым важным принципом является планомерный переход от функционально-ориентированного API к API, ориентированному на свойства. Это облегчит изучение и использование Qt и упростит написание привязок к другим языкам.
В Qt 4 появится новая более гибкая док-архитектура главного окна приложения с поддержкой возможностей современного GUI Windows и Mac OS X. Существующая архитектура Qt следует устаревшим руководствам построения GUI, которые приравнивают панели инструментов к док-окнам. Такая унификация сделала непредсказуемой стыковку док-окон и усложнила работу с ними пользователей. Новые классы обеспечивают предсказуемое поведение окон, упорядоченную стыковку и выдвижные док-окна.
Qt 3 поддерживает инфраструктуры IAccessible на Windows и Accessibility на Macintosh платформах (accessibility - общедоступность, пригодность к использованию людьми с ограниченными возможностями - прим. пер.). Мост, разработанный Trolltech для связи модуля Qt Accessibility с библиотекой Sun Accessibility Toolkit ATK предоставляет приложениям, использующим Qt 3.3, бесшовную интеграцию с Unix-технологиями общедоступности. Qt 4 расширяет эту поддержку от довольно ограниченных интерфейсов IAccessible до более сложных интерфейсов ATK.
Qt 4 будет разделена таким образом, что станет возможным использование неграфических возможностей библиотеки без компоновки с ее GUI-модулями. В результате неграфические приложения, такие как серверы и средства командной строки, можно будет создавать, используя Qt-классы контейнеров и инструментов, циклы обработки сообщений, таймеры, сетевые средства, XML, средства доступа к базам данных и т.п. без включения ненужного GUI-кода.
Многочисленные низко-уровневые улучшения в Qt 4 уже сейчас привели к уменьшению размеров двоичных файлов приложений на 10%, ускорению их начальной загрузки на 20% и к уменьшению расхода памяти приложениями на 15% по сравнению с Qt 3.