Мои мучения с Qt
2021-11-08 14:41Понадобилось мне по работе сваять простой плеер мультиков. То есть утилитку с графическим интерфейсом, показывающую выполнение некого вычислительного процесса на хитром матричном процессоре. Выглядит как мультик: данные бегают туда-сюда, умножители пыхтят. Как делать понятно, но надо подобрать, на чём делать. Пошёл я искать, какие нынче фреймворки в ходу, и оказалось непросто.
Работать должно на маке, линуксе и виндоуз, как обычно принято. Должен быть родной бинарный код для каждой платформы, а не виртуальные машины. Ну и размер приложения чтобы не зашкаливал. Ещё один критерий: язык лучше Rust, а не Си++, по возможности. Накушались уже этого Си++, всё с ним понятно, пора начинать переходить на более развитые вещи.
По старой памяти, стал я смотреть Qt, Gtk, Wx и другие известные библиотеки. У всех у них есть даже кое-какая привязка к Rust. Но Wx давно отстал от жизни, Gtk нормально фурычит только на линуксе, остался один Qt. И выяснились с ним серьёзные проблемы.
spamsink попробовал я CopperSpice. Тут хотя бы не надо подписку платить. Но опять же LGPL, то есть 200 мегабайт бинарников вынь да положь. И главная проблема: недостаточная поддержка. Из готовых пакетов не поставишь: ни на Убунту, ни на маке CopperSpice нету в пакетах. Собрать на маке не удалось: неопределённые темплейты и классы где-то в cs_string.h. Явная несовместимость с последней версией Apple SDK12.0. На линуксе собралось, но не запускается:
Вообще этот CopperSpice (да и Qt) - махина жуткого размера. Компиляция занимает несколько часов на не самой слабой машине. Для небольшого приложения явный перебор.
В общем, пока я остановился на Iced. Делает ровно то, что нужно, и приложения имеют разумный размер в пределах 4-7 мегабайт, без больших зависимостей.
Работать должно на маке, линуксе и виндоуз, как обычно принято. Должен быть родной бинарный код для каждой платформы, а не виртуальные машины. Ну и размер приложения чтобы не зашкаливал. Ещё один критерий: язык лучше Rust, а не Си++, по возможности. Накушались уже этого Си++, всё с ним понятно, пора начинать переходить на более развитые вещи.
По старой памяти, стал я смотреть Qt, Gtk, Wx и другие известные библиотеки. У всех у них есть даже кое-какая привязка к Rust. Но Wx давно отстал от жизни, Gtk нормально фурычит только на линуксе, остался один Qt. И выяснились с ним серьёзные проблемы.
- Qt больше не свободный софт. Мало того, для коммерческого применения его нельзя купить один раз и всю жизнь использовать, как раньше. Надо платить подписку каждый год, на каждого программиста в команде. Перестал платить - не можешь больше продавать свой софт на базе Qt.
- Можно юзать Qt с лицензией LGPL, не все компоненты, но основные. Но только с разделяемыми библиотеками. Никакой статической линковки. Это означает, что вместе с кодом своего приложения (обычно пара мегабайт) надо выдавать юзеру 200 мегабайт бинарников библиотек Qt. Как-то несоразмерно.
- Для Rust есть привязка к Qt, и на первый взгляд оно работает, я даже переписал пример простого текстового редактора с Си++ на Rust+Qt. Но при ближайшем рассмотрении возникают большие проблемы. Порождение новых элементов графического интерфейса в Qt делается через наследование классов Си++. Отлично работает, но... в языке Rust нет наследования. Серьёзная часть базовой функциональности недоступна.
The application failed to start because the platform plugin was not found or did not load.Бился-бился, да так и бросил.
Requested Plugin Key: "xcb"
Вообще этот CopperSpice (да и Qt) - махина жуткого размера. Компиляция занимает несколько часов на не самой слабой машине. Для небольшого приложения явный перебор.
В общем, пока я остановился на Iced. Делает ровно то, что нужно, и приложения имеют разумный размер в пределах 4-7 мегабайт, без больших зависимостей.
