Сколько весит qt
Qt — это библиотека классов C++ и набор инструментального программного обеспечения для создания кросс-платформенных приложений с графическим интерфейсом (GUI ). Существуют вариации для других языков: PyQt для Python, QtRuby для Ruby, Qt Jambi для Java.
Кто пользуется Qt
- Разработчики на C++, которые создают десктопные и мобильные приложения.
- Разработчики ПО для интернета вещей или для микрокомпьютеров.
- Специалисты в области специализированного оборудования: embedded-систем, промышленных роботов и другой сложной автоматики.
Обучайтесь основам C++, решайте задачи любой сложности на одном из самых мощных языков программирования.
Сферы применения
В основном Qt используют для создания очень быстрых и высокопроизводительных приложений. Это мессенджеры, игры или сложные ресурсоемкие программы. Он популярен в сферах, имеющих повышенные требования к безопасности ПО. Среди них:
- промышленность и транспортная отрасль. На C++ и на Qt пишут программы для роботов, которые используются на производствах, в перевозке грузов и других похожих отраслях. Qt используют при написании программного обеспечения для автомобилей, кораблей и других видов транспорта;
- MedTech. Фреймворк применяют при создании программных систем и интерфейсов для медицинского оборудования;
- IoT. На C++ с Qt пишут логику для «умных» приборов, которые подключаются к интернету вещей.
С использованием Qt написаны мессенджер Telegram, продукты Autodesk, окружение рабочего стола для многих систем под ядром Linux и пр.
Модули Qt
Тут перечислена часть основных модулей — блоков программного кода библиотеки Qt. В них содержатся классы и функции для создания приложений и работы с данными.
- QtCore — ядро фреймворка.
- QtGUI — компоненты для создания интерфейсов.
- QtNetwork — функции для работы с сетевыми соединениями.
- QtSql — компоненты для работы с базами данных на основе SQL.
- QtWidgets — модуль для работы с виджетами.
- QtXml — компоненты для обработки XML, специального формата хранения файлов.
- QtXmlPatterns — инструменты для работы с языками, которые обрабатывают данные XML и организуют к нему доступ.
- QtScript — классы внутреннего скриптового языка Qt Scripts.
- QtOpenGL — инструменты для работы с библиотеками, написанными по спецификации OpenGL.
- QtSvg — компоненты для обработки векторной графики.
- QtMultimedia — инструменты для работы с мультимедиа-файлами.
- QtWebEngine — ядро браузера Chromium, адаптированное под Qt.
- QtTest — компоненты для тестирования приложений.
- Qt3Support — поддержка старых версий фреймворка.
- QtCLucene — инструменты для автоматического поиска.
Что входит в QT
Кроме библиотеки и ее модулей, Qt содержит дополнительное ПО, утилиты, справочники и внутренние языки.
Qt Creator. Это IDE, среда программирования. Внутри Qt Creator можно писать, компилировать и запускать код, тестировать его и выполнять отладку. Среда работает в Windows, Linux и macOS.
Qt Assistant. Большой справочник и библиотека документации. Он добавляет в среду возможность открывать и читать документы, сохраненные в QCH — внутреннем формате Qt для справочных документов. Ассистент позволяет быстро разобраться в работе нужного модуля.
QT Linguist. Инструмент помогает быстрее локализовать приложение на разных языках. Используется при создании программ, которые рассчитаны на мультиязычную аудиторию.
Qt Designer. Инструмент позволяет быстро создавать графические интерфейсы (GUI). Он поставляется вместе с фреймворком и подходит для разработки приложений, где большую роль играют визуальные компоненты. Интерфейс создается внутри инструмента с помощью C++, сохраняется в файл и подключается к проекту, написанному на Qt.
Qt Quick. Еще один инструмент для интерфейсов. Он отличается от предыдущего: GUI создается не на C++, а с использованием специального языка QML. Отличается и стиль описания компонентов. Qt Quick предназначен для быстрого и простого создания интерфейсов. Его часто применяют при разработке мобильных приложений и игр.
QML. Это язык для создания интерфейсов от команды Qt. Он основан на среде JavaScript и помогает быстро описывать графические интерфейсы. В Qt реализована полная поддержка QML, а сам язык встроен в инструмент Qt Quick.
Метаобъектная система в Qt
Так называется часть ядра, которая отвечает за взаимодействие процессов и объектов между собой. В Qt это взаимодействие построено на системе слотов и сигналов.
- Каждый компонент может посылать сигнал об изменении состояния.
- У других компонентов есть специальные функции-слоты, которые принимают сигналы и в зависимости от них совершают либо не совершают действие.

Это реализация идеи «Наблюдатель и наблюдаемое», позволяющая не повторять одинаковый код. Чтобы внедрить эту систему в C++, нужна метаобъектная компиляция. Она дополняет возможности «чистого» языка. Так объекты способны хранить больше информации, поэтому им можно добавить сигналы и слоты.
Такое взаимодействие нужно при построении графических интерфейсов. Например, программа должна реагировать на определенные действия пользователя. Также система необходима при асинхронном или многопоточном программировании.
Преимущества Qt
Кросс-платформенность. Qt — кросс-платформенный фреймворк. Это значит, что он существует для всех популярных операционных систем: Windows, Linux, iOS и Android. Фреймворк используют при разработке под любые устройства: от микроконтроллеров до суперкомпьютеров.
Высокая скорость. Программы на C++ быстро обрабатываются и запускаются. Также C++ — компилируемый язык программирования. Это значит, что компилятор транслирует исходный код на C++ в исполняемый файл, который содержит набор машинных инструкций, что тоже влияет на скорость.
Удобная среда разработки. Qt Creator — среда, в которой легко разобраться. В ней есть все необходимое, важные компоненты находятся под рукой, а сам инструмент интуитивно понятен. В нем удобно организована отладка, поэтому разработчику легче находить проблемные участки кода.
Быстрое создание GUI. Дополнительные инструменты помогают быстро спроектировать интерфейс и разработать дизайн. Благодаря Qt Creator и его возможностям фреймворк отлично подходит для создания приложений с упором на графический интерфейс.
Взаимодействие процессов. Благодаря метаобъектной системе Qt может более гибко управлять межпроцессным взаимодействием, чем «чистый» C++. Сейчас это преимущество не так актуально, потому что появились версии C++ 11 и выше. Но много проектов пользуется легаси-кодом, написанным на старых версиях языка. Там особенности взаимодействия все так же важны.
Документация. На официальном сайте представлена подробная документация, которая поможет разобраться с особенностями работы с Qt.
Недостатки Qt
Сложности с лицензией. У Qt тройное лицензирование. Существуют три варианта библиотеки, каждый из них — под своей лицензией. Один предназначен для коммерческой разработки, второй — для проектов с открытым исходным кодом, третий — для собственнических проектов. Для коммерческих проектов нельзя использовать бесплатную версию.
Большой вес приложений. Qt добавляет много новых сущностей, все они занимают место. Итоговый проект быстро работает, но много весит. Для десктопных приложений это не так критично, как для мобильных.
Обратная совместимость. Из-за обратной совместимости со старыми версиями разработчики поддерживают в том числе неоптимальные решения.
Сложность. C++ — сложный язык. В нем много абстракций, он не интуитивно понятный. Новичкам бывает трудно в нем разобраться.
Распространенность. В основном C++ используется только там, где нужна высокая скорость работы. Это программное обеспечение для сложных промышленных систем, медицинской техники, автомобилей, роботов. Для пользовательских приложений язык применяется реже, чем раньше. Поэтому Qt встречается не так часто, как другие фреймворки.
Как начать работу с Qt
Бесплатную версию фреймворка можно скачать на официальном сайте. Небольшая программа-инсталлятор Qt Installer подгрузит и установит необходимые компоненты. Можно воспользоваться бесплатной версией либо приобрести лицензию. Она подходит для крупных коммерческих проектов. Для тестирования инструмента достаточно триальной версии (полная версия Qt со сроком действия 10 дней).
Сколько весит софт на Qt для Android?
Сабж. Не могу найти софта на Qt для андроида, чтобы сравнить/узнать. На нём ведь пишут для андроида, да? 🙂 Про то, что существует возможность подтянуть «расшаренную» версию Qt для всех qt-программ вкурсе, но меня интересует средний вес программ, которые носят Qt с собой. Речь о Qt5.
Перемещено Klymedy из talks

15-20 мегабайт, сложно сказать точнее, как впрочем и средний вес нативных приложений, зависит от ресурсов.

Минимум 7 МиБ. Верхнего предела, очевидно, нет.
Core+Multimedia+собственно программа потянули на почти 8.
Т.е. простой калькулятор на кутях для андроида будет весить в пределах 8 метров? Можешь дать ссылку на программу о которой речь?

Почему твои крестики нолики опять тормозят при тапах?
Оооо, круть, живой разработчик на qt для андроида 🙂 Какую лицуху используешь для разработки? В блоге у них в комментах упоминалось, что для разработчиков-одиночек и молодых стартапов коммерческая лицуха будет стоить дешевле, чем 350 баксов в месяц, не вкурсе сколько?
Накидай минусов, пожалуйста, при разработке для андроида (и вообще) на кутях. Понимаю, что будет отчасти субъективно, но всё же, ато собираюсь жизнь свою связать с чем-то гуевым кроссплатформенным, вот выбираю в какое болото нырять 🙂

LGPL. Мне ведь сам Qt изменять не нужно. И не думаю, что когда-либо будет нужно. И статически линковаться я с ним не собираюсь.
при разработке для андроида (и вообще) на кутях.
Самое страшное это обращение к телефонной книге, вибромотору и прочим сугубо андроидовским вещам. Разумеется Qt ничего не знает про вибромотор. Поэтому приходится такие штуки писать на Яве и использовать костыли для взаимодействия Явы и Си++.
Как здесь уже отвечали, писать на Qt — это использование костылей. Лучше писать нативно на жабе. Притом, что существуют бесплатные прекрасно адаптированные иде и плагины к ним для полноценной разработки с эмуляторами любой андроид платформы.
Жаба вполне похожа на Си по синтаксису. Отличается только тем, что нет возможности напрямую адресовать память. Переход почти безболезненный.
LGPL. Мне ведь сам Qt изменять не нужно. И не думаю, что >когда-либо будет нужно. И статически линковаться я с ним не >собираюсь.
Я вот этот момент не совсем понял, когда читал их доку/википедию. Я правильно понимаю, что если не изменяю код самого qt-фреймворка и статически не линкуюсь с ним, то могу не открывать исходных кодов своего гениального мегатворения?
Самое страшное это обращение к телефонной книге, вибромотору и прочим сугубо андроидовским вещам. Разумеется Qt ничего не знает про вибромотор. Поэтому приходится такие штуки писать на Яве и использовать костыли для взаимодействия Явы и Си++.
Хм, так в этом же вся соль, когда фрейворк предоставляет апи к этим стандартным функциям мобильного устройства. В чём тогда суть за исключением нативных виджитов?
И да. Большое количество работающих примеров.
Да так-то оно так, ну а хочется, допустим, чтобы сразу на многих платформах работало. Логика-то приложения одна и тажа.
Насчёт IDE. Ты про Android Studio? Я мельком встречал комментарии, что оно pain in the ass. Или они уже исправились?

Qt это кроссплатформенный фреймворк, а не фреймворк для Андроида. Т.е. программа, написанная на Qt с минимальными правками (а иногда и вовсе без них) скомпилируется под линь, БСДю, винду, андроид, иОС и может ещё подо что-то, чего я не помню.
Иде которое я использую eclipse.
Код классов которы делают логику приложения или там всякие киллер фичи типа своих компрессоров и шифровальщиков, тупо можно использовать загнав в jar библиотеки и использовать в любом жаба проекте. Интерфейсные фигни типа рисования кнопок под нужное разрешение экрана или использования вибро и акселерометра? — ну да, они всегда разные. На spark сервере их нет например. Или ты о какой переносимости?
Qt это кроссплатформенный фреймворк, а не фреймворк для Андроида. Т.е. программа, написанная на Qt с минимальными правками (а иногда и вовсе без них) скомпилируется под линь, БСДю, винду, андроид, иОС и может ещё подо что-то, чего я не помню.
Да это понятно. Но даже молодой phonegap/cordova предоставляет этот функционал для веб-девелоперов желающих писать софт «кроссмобильно». От кутей хочется ожидать не меньшего, учитывая возраст.

Ну если ты можешь писать на JS, HTML и CSS и тебя это не напрягает, от действительно смотри в сторону phonegap/cordova. Qt это плюсы.
Ну если ты можешь писать на JS, HTML и CSS и тебя это не напрягает
А зачем ты сюда привлек вуду куклы и тайные заклинания вебдевелопмента?
И да жабу часто использут для веба. А тебе что нужно?
Все уже поняли, что ты любишь Java, успокойся.

Qt это кроссплатформенный фреймворк, а не фреймворк для Андроида. Т.е. программа, написанная на Qt с минимальными правками (а иногда и вовсе без них) скомпилируется под линь, БСДю, винду, андроид, иОС и может ещё подо что-то, чего я не помню.
И как, на практике это подтверждается? На примере твоего же проекта, скажем. Можно легко запустить на линуксе без вибромотора? 🙂

Я разрабатываю из-под линукса, а на телефон начинаю заливать лишь на последних этапах подготовки релиза.
Не мешало бы поклацать самому на конечном девайсе перед выкладываением в плеймаркет. Хотябы час.

Если есть возможность, то использовать Java.
Если нужны нативные мощи, то привяжи лучше собственную либу к жабке и работай с ней оттуда. Qt на Android — слишком неповоротливо и жирно. Приложение с QtWidgets будет мегабайт 10-20 весить. С QML может немного меньше.

Один из немногих плюсов кроссплатформенной разработки. 🙂

Обычно имеется в виду iOS еще.
с QML оно будет весить больше, потому что притарабанит туеву хучу всяккой херни. Виджеты легче.
Android Studio уже волне можно юзать, даже нативщину к JNI теперь просто прикручивать.
Жаба вполне похожа на Си по синтаксису. Отличается только тем, что нет возможности напрямую адресовать память. Переход почти безболезненный.

И статически линковаться я с ним не собираюсь.
насколько я понимаю, Qt в последних версиях в принципе статической собрать нельзя, либо это какой-то слишком большой героизм, за который никто не берётся.
Разумеется Qt ничего не знает про вибромотор. Поэтому приходится такие штуки писать на Яве и использовать костыли для взаимодействия Явы и Си++.
а почему на жабе? ведь внутренности Андроида сишные, и вся начинка вроде бы должна управляться через обычные системные вызовы.
внутренности Андроида сишные, и вся начинка вроде бы должна управляться через обычные системные вызовы.
Не-а, в ядре почти ничего необычного нет, а вот юзерспейсе свои библиотеки, которые далеко не всегда документированы и фиг поймешь, что там стабильно, а что нет. Ну и исключительно явашный функционал тоже есть.

сдаётся мне, что жабу можно легко препарировать на этот счёт. это проще, чем городить огород с вызовами из плюсов в жабу и обратно. а может, просто пошукать в сети, наверняка кто-то уже это сделал.
В сети полно хомячков, которые за мир жапки не вылазят.
Инфы о сишной части андроида на порядок меньше.
И если ты дергаешь из своего кода документированный явовый метод, то у тебя есть гарантия того, что в следующей версии андроида твоя программа будет работать. А вот если дергаешь кишки, то нет.
Впрочем случаи бывают разные. Емнип, тот же скайп напрямую юзает андроидовскую подсистему с видеокодеками, и другого пути у него тупо нет. Т к в жапке тупо нету АПИ для низкоуровневой работы.

думаю, что жабка тоже дёргает какие-то системные API и их менять тоже особого смысла нет, потому что это сложно и невыгодно самим разработчикам. на сях под андроиды пишут, это я видела, хоть сама с ними дел не имела. так что доки на API всё-таки где-то должны быть.
Да нет, это проблема Qt, на С/С++. Нормальные игровые движки вполне предоставляют доступ и к вибромоторам, и к другим интересным вещам. На десктопе функции работы с этим хозяйством являются банальными заглушками. И всем норм.
Stellarium Mobile вполне себе на Qt и работает на Android/iOS/etc. Порядка 43 Мб, в которые входят текстуры и каталоги — которые и составляют львиную долю этого размера.

Приложения на Qt и QML в Android Market
Ловите, более-менее успешные:

До уровня того же Eclipse этой поделке ещё рости и рости.
Интересно, каким путём пошли Qt — дергают жабу или копают глубже?

Qt — это очень жирная библиотека, практически фреймворк на плюсах. но она живёт спокойно без всякой жабы, однозначно. она сама, наверное, уже стала по мощности как жаба. просто не портирована нативно под всякие андроиды. однако, если суммарно брать, то Qt всё ж таки более диетична, нежели жаба. жабу на андроид засунули исключительно из соображений, что хомяки быстрее освоятся и начнуть писать всякие приложухи. никакого портирования, выход на рынок, типа, быстрее, а на качество можно и наплевать. да и на плюсах программистов значительно меньше. но жаба на эмбеддеде ворочается жуть как неэффективно и пожирает большую часть ресурсов сама. а приложухи, написанные хомячками, окончательно добивают оставшуюся часть ресурсов. если бы там изначально была Qt в качестве основного фреймворка, то на андроиде бы можно было хоть в кваку гонять. и ещё бы ресурсы оставались.
Просто я думал, что доступ к системным API мимо жабки закрыт на нерутованном девайсе. Надо бы поинтересоваться на досуге.

Не могу найти софта на Qt для андроида, чтобы сравнить/узнать.
А так, хеллоуворд у вас будет весит мегабайт 7.
Разве под iOS нельзя писать на Java?
Инет говорит, что можно.

А ты пробовал вообще проекты под iOS писать? Ну я не видел людей в здравом уме, которые будут этим заниматься.

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

Android Studio самая прекрасная IDE которая только может быть.
По сравнению с Eclipse — небо и земля

мы в одной компании долго-долго искали iOS программиста. но не просто формочки клепать, а чтобы API знал, чтобы в сокеты мог. зарплату предлагали очень нехилую. и хрен там. не нашли никого. приходили какие-то хипстеры, которые могли только гуй, и то коряво. судя по всему, эта ниша у нас мало занята, а запросы на специалистов есть.

Для любителей «в кваку гонять» на телефонах есть сейлфишОС. Там къют — основной фреймворк. Да вот беда, никто не хочет кваку на ней писать, а юзеры всё андроидные приложения используют.

ну, это другой вопрос. если бы меня интересовала квака, я б написала. но я не игроман ни разу. наверное, и другие сишные писатели мало интересуются разработкой игр. хотя есть, конечно, спецы. но мне вот в кернел интереснее играть, чем в кваку 🙂
честно сказать, я и к Qt отношусь с подозрением. там есть, над чем работать, и очень серьёзно. она далека от совершенства и её разработчики этот бардак не разгребают с низов, а наращивают костыли сверху. технический долг, который однажды её взорвёт. я-то ваще фанат хардкора и хочу на сишечке, максимум на плюсах без всякого фреймворка хреначить. это самое оптимальное, по-моему.
Да вот беда, никто не хочет кваку на ней писать, а юзеры всё андроидные приложения используют.
На андроид все тяжелые игрушки на С++ пишут, если что. Из соображений скорости и переносимости на iOS.
Максимальное уменьшение веса Qt’шных библиотек
В общем, пишу небольшой онлайн-инсталлятор для Windows-версии одного моего проекта. Опыта с GUI под окнами у меня нет, поэтому выбрал Qt, чтобы абстрагироваться от всех этих премудростей WinAPI/Com. И всё вроде замечательно, но меня смущает размер получившегося бинарника. Со всеми нужными прилинкованными Qt’шными библиотеками он весит 15 мб., если линковать динамически — 200 кб. Собирал Qt с такими флагами:
configure -release -static -no-accessibility -opensource -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -no-libmng -no-libtiff -no-libjpeg -no-dsp -no-vcproj -openssl-linked -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-webkit -no-script -no-scripttools -no-declarative -no-declarative-debug
при компиляции использовал флаг -Os. Можно ли как-нибудь ещё уменьшить размер библиотек?
- Вопрос задан более трёх лет назад
- 6025 просмотров
- Вконтакте
Вы и так практически всё отключили.
Посмотрите сколько весят отдельно конкретно используемые Вами библиотеки (release сборки qtcore, qtgui, . ) — их сумма и будет Вашим минимумом.
Меньшего можно добиться только если вручную выкинуть неиспользуемые части qtgui и самому их пересобрать, но я сомневаюсь что это своит затраченного на это время — там достаточно много интересных зависимостей
ЗЫ -no-qt3support в реальности отбрасывает только отдельную библиотеку с более не используемыми классами, но для классов, названия которых сохранились с Qt3, например QString, код остаётся на месте и только скрывается в заголовочном файле через #ifdef QT3_SUPPORT
ЗЗЫ там ещё встречается #ifndef QT_NO_REGEXP, подтягиваемый через QtCore/qregexp.h, возможно для него тоже есть ключ, точнее сказать не могу, т.к. сейчас qt-devel и документация у меня не стоят.
- Вконтакте
9 метров Qt GUI. Что еще? У меня полноценная программка с Qt Quick весит 17,5. При создании msi получается 7.5, при том, что msi использует не лучший алгоритм архивирования
- Вконтакте
У libcurl есть возможность получать прогресс curl_easy_setopt(CURLOPT_PROGRESSFUNCTION, . )
Правда работать с libcurl лучше в отдельном потоке, чтобы не блокировался интерфейс.
Что касается qt, то минимального, чего я смог добиться, это 1.5 мегабайт в архиве 7zip (программа qtgui + qtnework)
Для этого я собирал с параметрами configure.exe -fast -static -release -qt-zlib -no-gif -no-stl -no-libpng -no-libmng -no-libjpeg -no-libtiff -no-exceptions -no-webkit -no-rtti -no-phonon -no-qt3support -no-multimedia -no-native-gestures -no-plugin-manifests -no-openssl -no-script -no-scripttools -no-declarative -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -no-style-windowsce -no-style-windowsmobile -no-accessibility -no-opengl -no-openvg -no-dbus
а также выключил всё что можно в \src\corelib\global\qconfig.h (изменять стоит осторожно, многие опции в этом файле уже не поддерживаются)
Использовал MSVC 2005 (он генерирует бинарники меньше, чем mingw)