sonyps4.ru

История Qt Software.

Думаю, что многим хорошо известна эта компания, но не все знают с чего всё начиналось. Я бы хотел выложить сюда небольшой кусочек истории этой, достойной уважения, компании. Кстати, случай с Qt в очередной раз подтверждает суждение, что всё начинается с малого, надо только быть уверенным в успехе и, конечно, что-нибудь делать хорошо:)

Как всё начиналось?

Средства разработки Qt впервые стали известны общественности в мае 1995 года. Первоначально Qt разрабатывалось Хаарвардом Нордом(исполнительный директор) и Айриком Чеймб-Ингом(президент), которые познакомились в Норвежском институте технологии г. Тронхейм.
Когда Хаарвард был привлечён шведской компанией к разработке интерфейса на С++, он стал проявлять интерес к разработке графического пользовательского интерфейса. А спустя два года (летом 1990г.) Хаарвард и Айрик работали вместе над разработкой на С++ приложения для баз данных ультразвуковых изображений. Эта система должна была предоставлять графический пользовательский интерфейс в системах Unix, Macintosh, Windows. Однажды летом два программиста вышли на улицу позагорать, и когда они присели на скамейку в парке, Хаарвард сказал: «Нам нужна объектно-ориентированная система отображения». Последующая дискуссия стала интеллектуальной основой объектно-ориентированной меж платформенной системы разработки графического пользовательского интерфейса, к созданию которой они вскоре и приступили.
В 1991 году Хаарвард начал писать классы, которые фактически образовали Qt, причём проектные решения принимались совместно с Айриком. В следующем году Айрику пришла идея «сигналов и слотов» - простой, но мощной парадигмы программирования GUI, которая в настоящее время заимствована некоторыми другими инструментами. Хаарвард воспринял эту идею с восторгом и реализовал её. К 1993 году Хаарвард и Айрик разработали первое графическое ядро Qt и могли создавать собственные виджеты. А в конце этого года Хаарвард предложил совместно заняться бизнесом и построить «самые лучшие в мире инструментальные средства разработки на С++ графического пользовательского интерфейса».
Но начало 1994 года не предвещало ничего хорошего, когда два молодых программиста собирались выйти на установившийся рынок, не имея ни заказчиков, ни законченного продукта, ни денег. К счастью, жены обоих имели работу и могли поддержать своих мужей в течение двух лет, которых, как считали Айрик и Хаарвард, будет достаточно для разработки программного продукта, позволяющего начать зарабатывать деньги.

История названий

Буква «Q» была выбрана в качестве префикса классов, поскольку эта буква имела красивое начертание в шрифте Emacs, которым пользовался Хаарвард. Была добавлена буква «t», означающая «toolkit»(инструментарий). Компания зарегистрирована 4 марта 1994 года и по началу называлась «Quasar Technologies», затем «Troll Tech», затем «Trolltech», а теперь просто «Qt Software» после покупки компании фирмой Nokia .

Как всё развивалось?

В апреле 1995 года через посредничество одного университетского профессора, знакомого Хаарварда, норвежская компания «Metis» заключила с ними контракт на разработку программного обеспечения на основе Qt. Примерно в это же время «Trolltech» приняла на работу Арнта Гулдбрансена, которые в течение своих шести лет работы в этой компании продумал и реализовал оригинальную систему документирования, а также внёс определённый вклад в программный код Qt.
20 мая 1995 года Qt 0.90 был установлен на сайте sunsite.unc.edu. Спустя шесть дней о выпуске этой версии было объявлено на comp.os.linux.announce. Это была первая публичная версия Qt. Qt можно было использовать в разработках как Windows, так и Unix, причём программный интерфейс был одинаковый на обеих платформах. С первого дня предусматривались две лицензии применения Qt: коммерческая лицензия предназначалась для коммерческих разработок, и свободно распространяемая версия предназначалась для разработок Open-source проектов. Контракт с «Metis» сохранил компанию на плаву, хотя в течение долгих 10-ти месяцев не было продано ни одной коммерческой лицензии Qt.
В марте 1996 года Европейское управление космических исследований стало вторым заказчиком Qt, которое приобрело десять коммерческих лицензий. Верящие в удачу Айрик и Хаарвард приняли на работу ещё одного разработчика. Qt 0.97 был выпущен в конце мая, и 24 сентября 1996 года вышла версия Qt 1.0. К концу этого года вышла версия Qt 1.1; восемь заказчиков - все их разных стран - приобрели в общей сложности 18 лицензий. В этом году был также основан Маттиасом Эттричем проект KDE .
Принятое Маттиасом решение по применению Qt для построения KDE помогло Qt стать фактическим стандартом по разработке на С++ графического пользовательского интерфейса в системе Linux. Маттиас присоединился к «Trolltech» в 1998 году, и последняя значимая версия Qt первого выпуска, 1.40, появилась в сентябре того же года. Qt 2 имела новую лицензию для открытого исходного кода - Q Public License(QPL), которая соответствовала Определению открытого исходного кода. В августе 1999 года Qt выиграла премию журнала «Linux World» за лучшую библиотеку или инструментальное средство. Примерно в это же время была образована компания «Trolltech Pty Ltd»(Австралия).
Qt 3.0 была выпущена в 2001 году. Qt теперь работала в системах Windows, Mac Os X, Unix. Qt 3.0 содержала 42 новых класса, и объем её программного кода превышал 500 000 строк. Qt 3 представляла собой важный шаг вперёд по сравнению с Qt 2, которая, в частности, значительно улучшила поддержку локализации и кодировки Unicode, ввела совершенно новые виджеты по просмотру и редактированию текста и класс регулярных выражений, аналогичных применяемым языкам Perl. Qt 3.0 была удостоена премии «Software Development Times» в категории «Высокая продуктивность» в 2002 году.
Летом 2005 года была выпущена Qt 4.0. Имея около 500 классов и более 9000 функций, Qt 4 оказалась больше и богаче любой предыдущей версии; она была разбита на несколько библиотек, чтобы разработчики могли использовать только нужные им части Qt. Версия Qt 4 представляет собой большой шаг вперёд по сравнению с предыдущими версиями; она содержит полностью новый набор эффективных и простых в применении классов-контейнеров, усовершенствованную функциональность архитекторы модель/представление, быстрый и гибкий фреймфорк графики 2D и мощные классы для просмотра и редактирования текста в кодировке Unicode, не говоря уже о тысячах небольших улучшений по всему спектру классов Qt. Qt 4 является первой версией Qt, доступной на всех поддерживаемых платформах как для коммерческой разработки, так и для разработки с открытым исходным кодом.

Заключение

Со дня образования компании популярность Qt постоянно росла, и она продолжает расти в наши дни. Этот успех является отражением качества Qt, так и того удовольствия, которые разработчик получает при его использовании. За последнюю декаду Qt превратилась из «секретного» программного продукта, известного только группе профессионалов, в продукт, которым пользуются по всему миру тысячи коммерческих заказчиков и десятки тысяч разработчиков приложений с открытым исходным кодом.

История взята из книги Бланшет и Саммерфилда «Qt4: программирование GUI на С++».

Я надеюсь, что теперь вы составили представление что такое Qt, даже если не знали ничего о нём. Спасибо за внимание.

tl;dr — Qt библиотека для создания кроссплатформенных оконных приложений на C++.

Qt, как проект, зародился из желания разработчиков C++ иметь удобный инструментарий разработки графических интерфейсов программ (GUI). Если, например, в Java для этих целей из коробки идет AWT, а в Python Tk, то в С++ не было ничего подобного. И не только того что касается разработки GUI, а так же классов работы с сетью, мультимедиа и прочих очень востребованных вещей. Чему очень досадовали разработчики. Ну а раз есть спрос, то предложение не заставило себя долго ждать. В 1995 году вышел первый релиз библиотеки. С тех пор Qt быстро стал расширяться за пределы всего-лишь разработки интерфейсов.

Поэтому, Qt стоит рассматривать не столько набор классов для создания GUI, а скорее как полноценный инструментарий классов на все случаи жизни. Этот набор всего (ну или почти всего) что может потребоваться программисту-прикладнику для создания практически любого приложения. Структура библиотеки логично разбита на компоненты, их очень много и с каждой новой версией Qt в них становится все больше и больше полезных классов.

Основных компонента два — QtCore являющий собой ядро библиотеки и QtGui представляющий компоненты графического интерфейса. Как мы в дальнейшем увидим, создаваемый проект всегда имеет при себе два этих компонента (за исключение консольных приложений, в которых обязательную роль играет QtCore).

Ну а далее, в зависимости от потребностей, разработчики вольны использовать все что душе угодно. QtNetwork для работы с сетью, написать свой Torrent-клиент. QtMultimedia для реализации видео-аудио плеера. QtWebEngine для встраивания в свое приложение полноценного браузерного движка. И многое другое.

Стоит так же отметить, что заявленная кроссплатформенность действительно присутствует. Вы можете взять свой код разрабатываемый на одной системе (Windows, MinGW) и скомпилировать ее компилятором другой системы (Linux, GCC) и получить бинарный файл способный запускаться там без особых хлопот. Как показала практика, особые хлопоты начинаются когда приложение становится сильно обвешенным сторонними библиотеками.

Приятным бонусом для веб-разработчиков станет возможность разрабатывать программы не только на C++, но и языке QML, сильно схожим с JavaScript. Это особая ветка развития Qt, направленная на быстрое прототипирование и разработку мобильных приложений.

Ну и конечно же, одной из изюминок Qt является среда разработки Qt Creator. Универсальная и очень удобная среда разработки на Qt, не перегруженная лишним функционалом, .

Естественно, из меня писатель как из бутылки молоток, так что уж простите, если увидети выдержки из какой-либо знакомой вам доселе не обессудте:-)))
И огромное спасибо uj за оказанную помощь в разработке статьи!!! Респект:-=))
И так... поехали!...

1. Что такое QT?
=================
Qt -- это кроссплатформенная библиотека, целью которой является вытеснение нативных API из ваших
программ. Сейчас Qt -- это огромный объектно-ориентированный комбайн, в большинстве случаев
позволяющий обойтись без привлечения каких-либо иных библиотек.
В первую очередь Qt -- отличное средство для создания графического пользовательского
интерфейса (GUI). В состав Qt входит дизайнер, позволяющий легко создавать графические интерфейсы
для вашего приложения.
Вам не придется заботиться о написании файлов сборки для каждой из платформ, за вас это сделают Qt.
Достаточно просто написать файл проекта, в который внести все используемые файлы, и файл
сборки можно будет создать одним вызовом утилиты qmake (естественно, под управлением целевой
платформы). От себя добавлю, что иногда этот файл приходится править руками (а как же).
О значимости данной библиотеки говорит хотя бы то, что она используется в таких успешных проектах,
как Borland C++ Builder 6 и Opera.

2. Где достать?
================
Библиотека поставляется по нескольким лицензиям, одни из которых -- платные, другие -- нет. Под
оконную систему X11 всегда можно с сайта www.trolltech.com легально
взять GPL-версию Qt (и использовать, естественно, только
в некоммерческих проектах). С системой Windows дело обстоит сложнее, поскольку, по мнению верхушки
TrollTech, эта система не является ареной OpenSource-разработки. Последняя бесплатная версия для
Windows -- 2.3.0. Но для находчивых людей это не проблема, есть сеть eDonkey ;-) Текущей на данный
момент является версия 3.3.1. В скором времени ожидается версия 4.

3. Технические подробности
=============================
Изначало Qt "работало" на пользовательский интерфейс. И именно поэтому эта часть библиотеки наиболее
используема и наиболее развита. Интересен подход к позиционированию виджетов (виджет -- элемент
GUI, всё что рисуется на окошке, включая его само) -- система слоёв (layout) позволяет вам забыть об абсолютном позиционировании, как о страшном сне. Теперь класс Layout сам следит за тем, что вы делаете с, например, главным окном и позиционирует все внутренние виджеты вслед за изменением геометрии этого окошка.
Центральной идеей Qt является сигнально-слотовый механизм, реализующий взаимосвязь между объектами.
Этот механизм реализован посредством прекомпиляции, что позволяет использовать его без всяких
ухищрений (если вы заинтересованы в Qt, прямо в данный момент забудьте о callback-вызовах).
Каждый Qt-объект (не только вызуальные элементы!) может генерировать некоторые сигналы, жестко
зашитые в структуру его класса. Сигнал -- это функция, объявленная в специальной секции signals
и не имеющая реализации ("тела") а только передаваемые аргументы. К сигналу объекта (заметьте, не класса) могут быть подключены слоты. Слот -- это всего лишь метод, также объявленный в специальных секциях "slots". Слоты
могут быть доступными (секция "public slots"), защищенными ("protected slots") и
скрытыми ("private slots"). При помощи специального метода connect слот подсоединяется к сигналу.
Небольшой пример:

Connect(myValueDetector, SIGNAL(ValueChange(Value a),
myApplicationUpdater, SLOT(onValueChange(Value a))));

После чего при каждом "испускании" сигнала ValueChange объектом myValueDetector
будет вызываться слот onValueChange объекта myApplicationUpdater.
Плюсы -- к одному сигналу можно подключить несколько слотов.
Минусы -- один слот нельзя использовать для нескольких сигналов (например, для обработки группы кнопок). Сравните с системой событий VCL/CLX -- там как раз всё наоборот. Рассмотрим небольшой пример использования сигнально-слотового механизма:

Как видите, код "немного" отличается от стандартного C++. Данный текст подаётся на вход мета-компилятора moc, который из него уже производит стандартный код C++, который затем компилируется любым компилятором. Moc отличает "свои", т.е. поддерживающие сигнально-слотовый механизм, классы от стандартных по ключевому слову Q_OBJECT в самом начале объявления класса.

Перечислим основные достоинства ядра библиотеки Qt:
* встроенная поддержка Unicode и локализации (очень хорошо и очень правильно реализованной, смею
заметить). В Qt4 обещают новый механизм рендеринга шрифтов, поддерживающий Unicode.
* мощные события и фильтры событий (событие - это что-то вроде универсального сигнала, который можно посылать любому виджету, распознавать и соотвествующим образом обрабатывать с помощью фильтров. Например нажатие различных клавиш)
* многофункциональные управляемые интервалами таймеры которые делают возможным просто и быстро
вставлять много разных заданий в управляемый событиями ГПИ.
* иерархические и настраиваемые объектные деревья, организующие принадлежность объектов естественным
образом.
* защищенные указатели QGuardedPtr, которые автоматически принимают значение NULL при
уничтожении соответствующего объекта, в отличие от обычных указателей в C++, которые в этом
случае становятся "неопределенными указателями".
* Удобная документация, доступная и на русском языке (ссылки к сожалению не знаю, но могу с удовольствием выслать по заявке).

В состав ядра библиотеки входят как классы для построения GUI (например: метка, поле ввода, кнопка и
т.п.), так и классы, предназначенные для организации различных струтур хранения данных (например,
списковых), работы с файлами, сетевого взаимодействия и многого другого. Некоторые из этих
возможностей реализованы в виде дополнительных модулей:
* модуль Canvas, мощный инструмент для работы с двухмерной графикой. Он использует принцип
структурирования графики, что, несомненно, будет полезно в программировании простых двухмерных
игр и подобного рода вещах. Холст состоит из нескольких "элементов", каждый элемент представлен
объектом. Поддерживается также ряд интересных возможностей, таких как collision-detection, перемещение(нет во фришных версиях под виндой:-((()
объектов с определенными скоростями по осям. Подробнее читаем по ссылке:
Ссылка
* модуль Network, обеспечивающий поддержку сети в приложениях.
* модуль OpenGL, позволяющий работать с трехмерной графикой при помощи портабельной библиотеки
OpenGL. Поддерживается с версии 2.3.2.
* модуль SQL, реализующий доступ к базам данных из приложений Qt. Данный модуль разбит на три уровня:
пользовательский (элементы интерфейса), программный (абстрактный доступ к базам данных) и уровень
драйверов.
* модуль Table, предоставляющий в ваше распоряжение сетку для отображения табличных данных. Сетка
являет собой очень мощный и гибкий интерфейс, работать с которым -- одно удобольствие
* модуль XML, использующий интерфейс SAX2 и реализацию DOM второго уровня.

Это далеко не полный перечень возможностей Qt.

3. Как написать простенькое приложение на QT?
=================================================
Напишем файлик main.cpp следующего содержания:

Теперь напишем файл проекта под это дело (simple.pro):

PROJECT = simple
TEMPLATE = app
CONFIG = qt warn_on debug
SOURCES = main.cpp
TARGET = simple

В командной строке наберем:

qmake simple.pro

И теперь черед утилиты make: приложение готово Запускаем, наблюдаем окошко с кнопочкой.



Загрузка...