Pull to refresh

Comments 44

Я не понимаю зачем все еще тащат ICU в Windows. Само приложение в Windows получается намного меньше чем скомпилированное на Mac OS или Linux (примерно на 30-40% меньше), но из-за зависимости на ICU упакованный установщик получается примерно в 5 раз больше (в моем случае примерно 5-7MB на Mac/Linux против 20-25MB на Windows)

Насколько я помню были наполеоновские планы вообще убрать зависимость на ICU в 5.5. Но воз все там же.
Вот специально поискал нашел репорт который говорит что пофиксили, но пофиксили как — надо руками собирать Qt, причем нигде не найти работающих инструкций. А сборка которая получается не заводится.
Извиняюсь не уточнил — под Windows для MinGW64. Есть официальная сборка для MinGW32, которая работает и под MinGW64, но для большинства приложений, с которыми я работаю, нужны именно 64-bit бинарники. И вот как раз ручная сборка под MinGW64 не работает.

Есть еще MSYS2 пакет, но он уже собран с жесткой зависимостью на ICU.
Думаю, что основные силы брошены на поддержку новых возможностей и из-за этого удаление ICU приторможено. Если вам предложат выбор между += 20MB к размеру программы или возможность из коробки Charts, 3D etc будет целесообразнее выбрать возможности, так как можно начать разработку с новыми фишками и потом (ну должены же когда-то убрать ICU) обновить версию Qt.
ну должены же когда-то убрать ICU


Мне кажется именно из-за такого мышления и не убрали до сих пор. Пока работают над новыми возможностями и думают «ну вот в следующем релизе уберем»; придет время следующего релиза а там будут новый функционал на добавку вместо работы над оптимизацией. Между тем количество жалоб по этому поводу просто огромно.

Ладно бы еще можно было руками собрать нормально, так ведь все библиотеки компилятся, я проект с ними не собирается.
Использую windeployqt. Начиная то ли с 5.5, то ли с 5.6, он перестал копировать ICU, размер моего инсталлятора существенно уменьшился.

К сведению: установил 5.7 для MSVC 2015 32-бит, библиотек ICU в составе нет (в 5.6 есть).

Сори за оффтоп.
К сожалению Qt — не самы распространенный фреймворк и программистов под него не так много как хотелось бы.
А мы очень ищем именно C++/Qt
Профиль вакансии тут: https://hh.ru/vacancy/17225983
Приходите!
Тут еще важно сказать, что писать гуй на Qt Widgets и Qt Quick controls, как говорится, две большие разницы. Для последнего можно плюсы вообще не знать и писать все на javascript. Рекомендую в вакансии расписать стек технологий и указать версию Qt 4\5
> разработка агента для сбора дополнительных данных об активности сотрудников.

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

Искать же готового, учитывая не самую интересную тематику вашего продукта, и не самый вкусный ценник, действительно можно долго…
Для последнего можно плюсы вообще не знать и писать все на javascript.


Очень спорное утверждение :)

UPD: Промазал с ответом :/
Вот например клиент к Яндекс Диску на Js и QML без использования C++ https://habrahabr.ru/post/230435/ код проекта http://bazaar.launchpad.net/~mrqtros/yad/trunk/files
Да, можно пытаться все писать на QML и был такой тренд. Но я бы сказал, что он уже прошел :) В каких-то случаях может это и оправдано, но в целом, не стоит пытаться любой ценой избежать кода на плюсах и тащить все в QML.
А никто и не знал что в всех версиях Qt до 5.7.0 было ограничение (баг) количества тредов и сокетов 1000 на процесс.
Как только количество сокетов или тредов доходило до 1000 то сразу вылет программы.
Только в Qt 5.7.0 сняли ограничения и теперь можно строить действительно масштабированные сервисы.

А еще в Qt 5.7.0 присутствует баг в плагине MySQL, next() с TINYINT UNSIGNED после вызова addBindValue() не читает значения больше 127.
«Модули Qt Script и Qt Enginio удалены из поставки.»

Откуда информация про QtScript? Похоже, что она не верная.
Да, исправил. Удален был Qt Quick 1, а Qt Script пока еще остается как deprecated.
Всем хорош Qt, но процесс деплоя приложения продолжает угнетать.
Начнем с того, что линковка фактически только динамическая. Да, я знаю, что можно собрать самому Qt статически. Но я отдаю приложение неопытному заказчику, который не осилит это, поэтому остается вариант только стандартной поставки.
Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.

Для построения графиков в Qt очень рекомендую QCustomPlot qcustomplot.com
Вот уж точно эталон удобства и качества. Добавил всего 2 файла в проект: cpp + h и все!
Это вам не Qwt, который нужно устанавливать в систему, подключать какие-то prf-файлы, собирать отдельно его проекты…
UFO just landed and posted this here
Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.
windeployqt
Ого, не знал про эту утилиту, спасибо.
Попробовал, натащила она 58 файлов в 9 папках. Большинство файлов не нужно. Но я все равно считаю, что это полный отстой в плане выпуска компактных приложений.
Не понимаю, почему нет варианта поставки Qt как статически собранного, чтобы на выходе был только 1 exe'шник?
Насколько я помню — проблемы лицензий. Поэтому стандартно нету поставки со статической линковкой. В любом случае если вам требуется такая поставка — вы должны обладать достаточным скилом чтобы собрать Qt самостоятельно и добиться нужного результата.
Если вы собираете приложение статикой и отдаете заказчику это приложение, то он имеет полное право требовать предоставить ему исходный код. Так-что будьте осторожны передавая статически собранные приложения написанные на Qt.
он имеет полное право требовать предоставить ему объектные файлы
fixed
Я заказчику отдаю исходники, именно для этого он меня нанимает. Проблемы лицензирования Qt… хм, мы в какой стране живем? :)
ну тогда можно взять Process Explorer и вручную копировать нужные dll. Только в таком случае нужно создавать иногда поддиректории. Например qwindows.dll нужно кидать не в корень с приложением, а в папку в созданную папку platforms.
Большинство файлов не нужно.

Как вы определили?
Сравнил с тем, минимумом, с которым приложение запускается. Ну и например создало папку sqldrivers, в которой кроме нужного мне sqlite есть еще odbc, psql, mysql. Или папка с переводами Qt на японский.
Плагины — это сложная штука, т.к. приложение не слинковано с ними и они загружаются в процессе работы программы. И как узнать, использует приложение плагин или нет? Для QML есть специальный сканер импортов, а вот для плюсов такого пока нет, насколько я знаю. Видимо, если вы используете SQL, то копируются все SQL-плагины.
Тут вам может помочь сборка Qt из исходников и без лишних плагинов :)
Большинство файлов не нужно

Вот не сказал бы. На специфичных системах (например WinXP, слабые процессоры, отсутствие гпу и пр) некоторые библиотеки фаллбэкаются в другие. Например на большинстве машин есть библиотечка OpenGL. Там, где ее нет, Qt пытается использовать ANGLE, если не получается — софтварный рендер. Для каждого такого фаллбэка нужен свой набор библиотек, которые при обычных (идеальных) условиях даже не подключаются.
windeployqt для автоматического подтягивания зависимостей Qt.

А изыскания можно упростить тулами, которые покажут используемые модули. Для Windows это Dependency Walker или тот же Process Explorer из sysinternals(во время отладки).
Начнем с того, что линковка фактически только динамическая.

Нет.

Да, я знаю, что можно собрать самому Qt статически. Но я отдаю приложение неопытному заказчику, который не осилит это, поэтому остается вариант только стандартной поставки.

Если ваш заказчик осилит собрать приложение, то не такой уж он и неопытный ;)

Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.

{win, mac, android}deployqt. Только под Linux пока что нет соответствующей утилиты.

Причем выясняется через stackoverflow.com, а не через официальную документацию

http://lmgtfy.com/?q=qt+applications+deploy&l=1
Вы ведь в курсе, что у QCustomPlot лицензия GPL, в отличие от Qwt, которая под LGPL?
А работу с контекстом в QJSEngine так и не сделали? Интегрирование в скриптовую машину всяких QList<Class*>, где Class — наследник QObject? На QtSctipt такие задачи решались 1-й функцей…
А вот кто мне объяснит, почему 64 бит для Windows только под MSVC? Особенно удручает в этом тот факт, что нужно ставить этот самый MSVC отдельно. А если учесть, что со временем отпадает поддержка старых версий MSVC…
Когда мы увидим 64 бит, например, с mingw?
Конечно, можно собрать самому или найти готовую сборку от «стороннего производителя».
Но хотелось бы получить готовый инструмент для 64 бит (пусть даже ограниченный, если есть какие-то проблемы) сразу с выходом новой версии.
Да, я тоже этого никогда не понимал. Места им на сервере что-ли жалко?
Я бы вообще предпочел полную матрицу всех возможных сочетаний сборок Qt: для всех ОС, всеми доступными на каждой ОС компиляторами, для всех доступных разрядностей. Например, для винды кроме msvc и mingw, доступен еще clang, пора бы и для него выкладывать сборки.
Тогда они должны объявить это официальной сборкой и поддерживать. Плюс, официальные сборки же не просто собираются, но и постоянно тестируются при помощи CI.

Clang для Windows теоретически должен же быть совместим с MSVC?

Теоретически он со всеми совместим, но на практике ещё можно столкнуться с проблемами. Иногда приходится отписывать в bug-трекер.
QWebEngine под MINGW опять не поставляют, думал хоть к этой версии исправятся, 100 лет бы не использовал мелкомягкий компилятор, но у QwebKit постоянно течет память и исправлять никто не будет ибо выкинули окончательно, придется ставить студию… Как же все ужасно!

Кстати, буквально сейчас нашел, если кому это тоже сильно мешает — единственная версия Qt в которой не происходит утечек памяти в QWebView при загрузке страниц, это 5.1, до и после поломаны.
Sign up to leave a comment.

Articles