Qt (МФА [ˈkjuːt], произносится «кьют» как «cute»[5]) или неофициально Q-T («кью-ти», «ку-тэ», «кью-тэ») — фреймворк для разработки кроссплатформенного программного обеспечения на языке программирования C++. Для многих языков программирования существуют библиотеки, позволяющие использовать преимущества Qt: Python — PyQt, PySide; Ruby — QtRuby[6]; Java — QtJambi[7]; PHP — PHP-Qt и другие.
Qt | |
---|---|
| |
Тип | фреймворк |
Авторы | Ховард Норд[вд] и Эйрик Шамбе-Энг[вд] |
Разработчики |
Trolltech (1991–2008) Nokia (2008–2011) Qt Project (2011–?) Digia (2012–2014) The Qt Company (2014 — настоящее время) |
Написана на | C++[2] |
Операционные системы | GNU/Linux[3], Windows[3], macOS[3], BSD[вд][3], Android[3] и iOS[3] |
Первый выпуск | 20 мая 1995 |
Последняя версия | |
Репозиторий | code.qt.io/cgit/qt/qtbas… |
Лицензия | LGPL-3.0[вд][3][4], GNU GPL 2[3] и GNU GPL 3[3] |
Сайт | qt.io (англ.) |
Медиафайлы на Викискладе |
Со времени своего появления в 1996 году библиотека легла в основу многих программных проектов. Кроме того, Qt является фундаментом популярной рабочей среды KDE Plasma, входящей в состав многих дистрибутивов Linux.
Функции и состав
правитьQt позволяет запускать написанное с его помощью программное обеспечение в большинстве современных операционных систем путём простой компиляции программы для каждой системы без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Является полностью объектно-ориентированным, расширяемым и поддерживающим технику компонентного программирования.
Отличительная особенность — использование метаобъектного компилятора — предварительной системы обработки исходного кода. Расширение возможностей обеспечивается системой плагинов, которые возможно размещать непосредственно в панели визуального редактора. Также существует возможность расширения привычной функциональности виджетов, связанной с размещением их на экране, отображением, перерисовкой при изменении размеров окна.
Комплектуется визуальной средой разработки графического интерфейса Qt Designer, позволяющей создавать диалоги и формы в режиме WYSIWYG. В поставке Qt есть Qt Linguist — графическая утилита, позволяющая упростить локализацию и перевод программы на многие языки; и Qt Assistant — справочная система Qt, упрощающая работу с документацией по библиотеке, а также позволяющая создавать кроссплатформенную справку для разрабатываемого на основе Qt программного обеспечения. Начиная с версии 4.5.0 в комплект включена среда разработки Qt Creator, которая включает редактор кода, справку, графические средства Qt Designer и возможность отладки приложений. Qt Creator может использовать GCC или Microsoft VC++ в качестве компилятора и GDB в качестве отладчика. Для Windows-версий библиотека комплектуется компилятором, заголовочными и объектными файлами MinGW.
Существуют версии библиотеки для Microsoft Windows, систем класса UNIX с графической подсистемой X11, Android, iOS, macOS, Microsoft Windows CE, QNX[8], встраиваемых Linux-систем и платформы S60. Идет портирование на Windows Phone и Windows RT[9][10]. Также идёт портирование на Haiku и Tizen.
Некоторое время библиотека также распространялась ещё в версии Qt/Embedded, предназначенной для применения на встраиваемых и мобильных устройствах, но начиная с середины 2000-х годов она выделена в самостоятельный продукт Qtopia.
Начиная с версии 4.5 Qt распространяется по трём лицензиям:
- Qt Commercial — для разработки программного обеспечения с собственнической лицензией, допускающая модификацию самой Qt без раскрытия изменений;
- GNU GPL — для разработки с открытыми исходниками, распространяемыми на условиях GNU GPL, а также для модификации Qt;
- GNU LGPL — для разработки программного обеспечения с собственнической лицензией.
Исходный код, единый для всех вариантов лицензий, свободно доступен в Git-хранилище, расположенном на Github. Кроме самого исходного кода Qt, там же расположены хранилища сопутствующих библиотек, разрабатываемых авторами библиотеки и сообществом.
До версии 4.0.0 под свободной лицензией распространялись лишь Qt/Mac, Qt/X11, Qt/Embedded, но, начиная с 4.0.0 (выпущенной в конце июня 2005), Qt Software «освободили» и Qt/Windows. При этом существовали сторонние свободные версии Qt/Windows ранее 4.0.0, сделанные на основе Qt/X11.
Поддерживаемые платформы
правитьQt работает на большом количестве разных платформ; следующие поддерживаются официально:
Платформа | Описание |
---|---|
Linux/Unix | |
X11 | Qt для оконного менеджера X (Linux, FreeBSD, HP-UX, Solaris, AIX, и т. д.).[11] |
Wayland | Qt для Wayland.[12] Приложения на Qt могут переключаться между графическими бэкэндами вроде X и Wayland во время загрузки, если добавить опцию командной строки -platform.[13][14] Это позволяет приложениям незаметно переходить с X11 на Wayland. |
Встраиваемые Linux-системы | Qt для встраиваемых систем: КПК, смартфонов, и т. д.[15] Существует в виде нескольких платформ, в зависимости от технологии отрисовки. DirectFB, LinuxFB и EGLFS (EGL Full Screen). |
Android | Qt для Android[16], ранее известный как Necessitas.[17] |
Платформы Apple | |
macOS | Qt для Apple macOS; поддерживает приложения на Cocoa.[18] |
iOS | Qt для iOS платформ (iPhone, iPad).[19] |
Платформы Microsoft | |
Windows | Qt для Microsoft Windows XP, Vista, 7,[20] 8 и 10.[21] |
Windows CE | Qt для Windows CE 6 и Windows Embedded Compact 7.[22] |
Windows RT | Поддержка для основанных на WinRT приложениях для Windows 8 и Windows Phone 8[23]. Начиная с версии 5.4: Windows Phone 8.1.[24] |
Другие встраиваемые платформы | |
Integrity | Qt для Integrity.[25] |
QNX | Qt для QNX.[26] |
VxWorks | Qt для VxWorks.[27] |
После того, как Nokia открыла исходный код Qt сообществу на Gitorious[англ.], появились различные порты. Также есть некоторые порты, которые могут быть доступны, но более не поддерживаются.
Компоненты
правитьБиблиотека разделена на ряд модулей:
- QtCore — классы ядра библиотеки, используемые другими модулями;
- QtGui — компоненты графического интерфейса;
- QtWidgets — содержит классы для классических приложений на основе виджетов, модуль выделен из QtGui в Qt 5;
- Qt QML — модуль для поддержки QML;
- QtNetwork — набор классов для сетевого программирования. Поддержка различных высокоуровневых протоколов может меняться от версии к версии. В версии 6.6.x присутствуют классы для работы с протоколами HTTP, DNS, SCTP. Для работы с протоколами TCP/IP предназначены такие классы, как QTcpServer, QTcpSocket для TCP и QUdpSocket для UDP;
- QtSvg — классы для отображения и работы с данными Scalable Vector Graphics (SVG);
- QtXml — модуль для работы с XML, поддерживаются модели SAX и DOM;
- QtTest — классы для поддержки модульного тестирования;
- QtQuick — модуль, предоставляющий декларативный фреймворк для создания динамичных, настраиваемых пользовательских интерфейсов.
Так же начиная с Qt5 существуют аддоны — модули для решения определенных задач, которые не доступны для всех платформ.
- ActiveQt — модуль для работы с ActiveX и COM технологиями для Qt-разработчиков под Windows.
- Qt 3D
- Qt Bluetooth
- Qt Concurrent
- Qt Help
- Qt Image Formats
- Qt Multimedia — модуль для поддержки воспроизведения и записи видео и аудио, как локально, так и с устройств и по сети
- Qt NFC
- QtOpenGL — набор классов для работы с OpenGL
- Qt PDF
- Qt PrintSupport
- Qt QuickWidgets
- Qt Sensors
- Qt Serialport
- QtSql — набор классов для работы с базами данных с использованием SQL. Основные классы данного модуля в версии 4.2.х: QSqlDatabase — класс для предоставления соединения с базой, для работы с какой-нибудь конкретной базой данных требует объект, унаследованный от класса QSqlDriver — абстрактного класса, который реализуется для конкретной базы данных и может требовать для компиляции SDK базы данных. Например, для сборки драйвера под СУБД Firebird или InterBase требуются .h-файлы и библиотеки статической компоновки, входящие в комплект поставки данной СУБД;
- Qt XML
- QtWebEngine — модуль Chromium, интегрированный в Qt и доступный через её классы. В QT 6.3.0 версия chromium — 94.0[28]
Также реализована технология WoC — widgets on canvas, с помощью которой реализована Plasma в KDE 4.1, Будет возможным использовать виджеты библиотеки Qt прямо в аплетах. Обеспечивает расположение виджетов на QGraphicsView с возможностью масштабирования и различных графических эффектов.
Документация
правитьОдно из преимуществ фреймворка Qt — подробная документация[29][30], сопровождающаяся большим количеством примеров. Исходный код примеров содержит подробные комментарии и описание, что также упрощает изучение Qt.
Использование
правитьQt используют Autodesk, Maya[31][32], GoldenDict — оболочка для электронных словарей, Skype, Telegram, Медиапроигрыватель VLC[33], VirtualBox, Mathematica[34], на European Space Agency[35], DreamWorks[36][37], Google, HP[38], Lucasfilm[39], Panasonic[40], Philips[41], Samsung[42], Siemens[43], Volvo[44] и Walt Disney Animation Studios[45], Google Планета Земля, медиаплеер CherryPlayer.
Кроме того, на Qt основана среда рабочего стола KDE, графический интерфейс мобильной ОС MeeGo и Qt Creator — среда разработки на Qt;
Архитектура
правитьQt построен на следующих принципах:
Сигналы и слоты
правитьСредство коммуникации между объектами Qt. Виджеты посылают сигнал, который может быть обработан слотом.
Таким образом реализуется паттерн MVC.
Метаобъектный компилятор
правитьМетаобъектная система — часть ядра фреймворка для поддержки в C++ таких возможностей, как сигналы и слоты для коммуникации между объектами в режиме реального времени и динамических свойств системы.
Метаобъектная система содержит: класс QObject
, макрос Q_OBJECT
и утилиту moc
(метаобъектный компилятор). QObject
— это базовый класс для всех Qt-классов. Макрос Q_OBJECT
используется для включения метаобъектных функций в классах и на этапе компиляции работает как препроцессор, который преобразует применения макроса в исходный код C++.
Языковые привязки
правитьQt доступен для нескольких языков программирования, таких как Python, Java, Rust, Javascript.
Инструменты
правитьПроект Qt предоставляет Qt Creator — среду разработки для C++, QML.
Так же предоставляется qmake — устаревшее с версии 6 средство сборки, замененное на CMake.
Примечания
править- ↑ Qt 6.8.1 Released (англ.) — 2024.
- ↑ The qt Open Source Project on Open Hub: Languages Page — 2006.
- ↑ 1 2 3 4 5 6 7 8 9 Free Software Directory
- ↑ http://trolltech.com/company/newsroom/announcements/press.2008-01-18.1601592972
- ↑ Interview with Trolltech’s Eirik Eng and Matthias Ettrich (англ.) (12 апреля 2004). Дата обращения: 16 декабря 2011. Архивировано из оригинала 3 февраля 2012 года.
- ↑ アーカイブされたコピー . Дата обращения: 3 августа 2007. Архивировано из оригинала 9 августа 2007 года.
- ↑ http://www.qtsoftware.com/products/qt/jambi/ (недоступная ссылка)
- ↑ Qt framework for QNX Архивная копия от 2 ноября 2011 на Wayback Machine (англ.)
- ↑ Change I4352629a: Windows RT and Windows Phone preliminary support Архивная копия от 23 октября 2013 на Wayback Machine (англ.)
- ↑ Qt’s WinRT port and its C++/CX usage Архивировано 29 октября 2013 года. (англ.)
- ↑ Qt Wiki – Support for Linux/X11 . Qt Project (12 августа 2011). Дата обращения: 21 августа 2013. Архивировано 1 мая 2015 года.
- ↑ Jørgen Lind. Multi-process Lighthouse . Qt Project (18 марта 2011). Дата обращения: 21 августа 2013. Архивировано 18 июня 2015 года.
- ↑ Getting started with Lighthouse . Дата обращения: 25 ноября 2011. Архивировано 27 апреля 2015 года.
- ↑ Kristian Høgsberg. Add wayland lighthouse plugin (25 января 2011). Архивировано из оригинала 3 февраля 2016 года.
- ↑ Qt Wiki – Support for Embedded Linux . Qt Project (12 августа 2011). Дата обращения: 10 апреля 2015. Архивировано 1 мая 2015 года.
- ↑ New Features in Qt 5.1 - Support for New Platforms . Digia (3 июля 2013). Дата обращения: 10 апреля 2015. Архивировано 23 апреля 2015 года.
- ↑ Necessitas project . Дата обращения: 10 апреля 2015. Архивировано из оригинала 20 февраля 2016 года.
- ↑ Qt Wiki – Support for macOS . Qt Project (16 февраля 2017). Дата обращения: 20 декабря 2018. Архивировано 30 ноября 2018 года.
- ↑ Supported Platforms . Дата обращения: 1 февраля 2014. Архивировано 26 декабря 2014 года.
- ↑ Qt Wiki – Support for Windows . Qt Project (11 августа 2011). Дата обращения: 11 августа 2013. Архивировано 30 апреля 2015 года.
- ↑ Windows 10 Support in Qt . Qt Company (29 апреля 2015). Дата обращения: 28 января 2016. Архивировано 19 января 2016 года.
- ↑ Bjoern Breitmeyer. The State of WinCE Support in Qt5 . KDAB (21 августа 2013). Дата обращения: 21 августа 2013. Архивировано 18 июня 2015 года.
- ↑ Qt for WinRT . Qt Project. Дата обращения: 9 сентября 2014. Архивировано 14 июля 2019 года.
- ↑ New Features in Qt 5.4 — Qt Wiki . Дата обращения: 28 февраля 2016. Архивировано 29 февраля 2016 года.
- ↑ Qt Product pages, Supported platforms . Qt - Product - Qt Framework. The Qt Company. Дата обращения: 21 ноября 2014. Архивировано 20 ноября 2014 года.
- ↑ Qt Blog. Qt Commercial Formally Supports QNX | Qt Blog . Blog.qt.digia.com. Дата обращения: 19 марта 2013. Архивировано из оригинала 8 октября 2013 года.
- ↑ Qt Blog. Qt Commercial for VxWorks | Qt Blog . Blog.qt.digia.com. Дата обращения: 19 марта 2013. Архивировано из оригинала 19 апреля 2014 года.
- ↑ QtWebEngine/ChromiumVersions - Qt Wiki . wiki.qt.io. Дата обращения: 24 августа 2022. Архивировано 24 августа 2022 года.
- ↑ Jono Bacon. Reviews: Qt (англ.). MacTech (2004). Дата обращения: 16 сентября 2010. Архивировано 23 августа 2011 года.
- ↑ Online Reference Documentation (англ.). Nokia. Дата обращения: 16 сентября 2010. Архивировано из оригинала 23 августа 2011 года.
- ↑ Qt in Autodesk . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt in visual effects . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt in VideoLan Player . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt delivered advanced, cross-platform C++ GUI for Mathematica’s development team . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt in the European Space Agency . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Behind the Scenes at DreamWorks Animation: Making the Apps that Make the Movies . Архивировано из оригинала 3 февраля 2012 года.
- ↑ UI & System Design Challenges for the NxG Lighting Tool . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Developing Innovative Desktop and Embedded HP Products with Qt . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Lucasfilm Entertainment Company Ltd. Архивировано из оригинала 3 февраля 2012 года.
- ↑ Panasonic selects Qt for HD video system . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt in IP Communications . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt in Home Media . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt helped Siemens deliver a C++ development platform for manufacturing software GUIs . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Volvo Mobility Systems . Архивировано из оригинала 3 февраля 2012 года.
- ↑ Qt helped Walt Disney reduce development time spent on its cross-platform feature film production application . Архивировано из оригинала 3 февраля 2012 года.
Литература
править- Макс Шлее. Qt 5.10 Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2018. — 1072 с. — ISBN 978-5-9775-3678-3.
- Макс Шлее. Qt 5.3 Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2015. — 928 с. — ISBN 978-5-9775-3346-1.
- Боровский А. Qt 4.7+ Практическое программирование на C++. — СПб.: БХВ-Петербург, 2012. — 496 с. — ISBN 978-5-9775-0757-8.
- Макс Шлее. Qt 4.8 Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2012. — 912 с. — ISBN 978-5-9775-0736-3.
- Саммерфилд М. Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на C++. — СПб.: Символ-Плюс, 2011. — 560 с. — ISBN 978-5-93286-207-0.
- Макс Шлее. Qt 4.5 Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2010. — 896 с. — ISBN 978-5-9775-0398-3.
- Ж. Бланшет, М. Саммерфилд. Qt 4: Программирование GUI на C++. 2-е дополненное издание. — М.: Кудиц-пресс, 2008. — 736 с. — ISBN 978-5-91136-059-7.
- Земсков Ю.В. Qt 4 на примерах. — СПб.: «БХВ-Петербург», 2008. — 608 с. — ISBN 978-5-9775-0256-6.
- Ж. Бланшет, М. Саммерфилд. Qt 4: Программирование GUI на C++. — М.: Кудиц-пресс, 2007. — 648 с. — ISBN 978-5-91136-038-2.
- Макс Шлее. Qt 4: Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2007. — 880 с. — ISBN 978-5-9775-0010-6.
- Чеботарев А. Библиотека Qt 4. Создание прикладных приложений в среде Linux. — М.: Диалектика, 2006. — 256 с. — ISBN 5-8459-0996-1.
Ссылки
править- Официальный сайт Qt (англ.)
- «Re-implementing Qt moc using libclang». Olivier Goffart. 2013-07-04. Retrieved 2013-07-04.