Wiki

Первое знакомство с Qt 4

Qt Quarterly, 2004 Перевод: Andi Peredri Неофициальный перевод статьи 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 на основе таблиц, линейных и древовидных списков. При этом интерфейсы остаются быстрыми и отзывчивыми даже для больших структур данных.

Interview

Одни и те же данные могут обрабатываться несколькими видами одновременно. К тому же новые виджеты полностью поддерживают языки с чтением справа-налево.

Новый набор контейнеров

В Qt 4 появился новый набор шаблонных классов под кодовым именем Tulip. Они проще, легче и безопаснее в использовании, чем стандартные STL-контейнеры. Программисты, незнакомые с STL или предпочитающие работать в "духе Qt", могут использовать эти классы вместо стандартных. Новые шаблонные классы используют неявный совместный доступ, отлично работают с потоками и оптимизированы по характеристикам скорости, низкому расходу памяти и минимальному размеру кода подставляемых функций. Классы таких контейнеров, как QList, QVector, QMap, QHash и QStack поддерживают цикл foreach и Java-подобные итераторы. При этом, в отличие от Java, не требуется явное приведение типов. Это стало возможным благодаря шаблонам C++. Цикл foreach в Qt 4:
      foreach (QString s, list)
            sum += s.length();
Java-подобный итератор в Qt 4:
      QListIterator < QString > i(list);
        while (i.hasNext())
            sum += i.next().length();
STL-подобный итератор в Qt 4:
      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

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.