LINUX.ORG.RU

linux, C++, GUI: что минималистичнее, быстрее, дубовее и живучее - qt, gtk?

 


0

3

Хочется напилить на крестах научную тулзу с гуём и положить на гитхаб.

Раньше много пейсал на C++/Qt5. Но осталось впечатление, что тепловозом на такси бомблю. Всё классно, но: оно жирное, содержит все свистоперди мира, код не «чистый» (слоты-сигналы-moc), проприетарщицкие угрозы.

Хочется что-то более классическое, менее подверженное играм корпораций, менее жирное, не содержащее в комплекте то, чего не просили (мне от гуи фреймворка не нужен звук, сеть и CSS/HTML5 рендерер), с более кондовым и тупым подходом к разработке (ничего кроме чистого C++, пусть и древноватого). То есть я предпочёл бы явно заинклудить libpng, libjpeg и поепацца с загрузкой файлов/ресурсов сам как удобно мне.

Хотелось бы, чтобы юзер гитхаба усрал свой диск минимальным числом байт, apt install-ируя зависимости к моему проекту.

Ну и мне не нравится богомерзкий CMake, мне проще нафигарить простейший makefile - под мастдай и яблоко собираться не планирую.

Наверное это GTK3? Или что?

Что нужно от либы: рисовать основное окно, кнопки, поля ввода, крутилки, скроллбары, буферы пикселей (возможность запила бесконечной прокрутки длинной зарендеренной осциллограммы), радиокнопки, чекбоксы - ну основные компоненты, короче. Буду много работать с 2D-сонограммами, спектрограммами: короче пиксели рисовать и двигать блоки пикселей.

Спасибо.

UPDATE

Почитал срачь фкамментах. FLTK - вещь! Спасибо за наводку. Воистину C++ крестовая нативная минималистичная хрень без двух камазов доп-говна как в Qt.

FLTK-1.4 - https://github.com/fltk/fltk - взял с гитхаба, собрал, поигрался. Собралось CMake-ом на убунте в два прихлопа без ёпли и грёбли. Свой пример собрать не смог, обосрался с набором либ:

g++ -std=c++11 test.cpp -lfltk -lcairo -lX11 -lwayland-client -lpango-1.0 -lglib-2.0 -lgio-2.0 -lgthread-2.0
/usr/bin/ld: /usr/local/lib/libfltk.a(Fl_Cairo_Graphics_Driver.cxx.o): undefined reference to symbol 'g_object_unref'
/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Но я не унываю - примеры в папочке «примеры» выглядят нормально. Я собираю как тупая тварь и лошара, а надо наверное через какой-то fltk-config или как там его, но это я потом пойму.



Последнее исправление: trisobakov (всего исправлений: 3)

под мастдай и яблоко собираться не планирую.

Тогда GTKmm. А можно и QT. Там делов то на пол дня определиться.

GTK оно приятнее, ИМО. Плюс ты на QT уже писал.

Roy-Batty
()
Последнее исправление: Roy-Batty (всего исправлений: 1)

Хочется что-то более классическое, менее подверженное играм корпораций, менее жирное, не содержащее в комплекте то, чего не просили

Xlib, Gtk+ 2.

posixbit ★★
()

Раньше много пейсал на C++/Qt5. Но осталось впечатление, что тепловозом на такси бомблю.

Нет.

Всё классно, но: оно жирное,

Нет.

содержит все свистоперди мира,

Только то, что ты используешь.

код не «чистый» (слоты-сигналы-moc),

MOC заменяется макросами. См. https://github.com/woboq/verdigris.

В любом случае, GTK значительно хуже Qt по перечисленным критериям. Любая версия.

проприетарщицкие угрозы.

Не имеющие под собой основания.

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 1)

менее подверженное играм корпораций, менее жирное, не содержащее в комплекте то, чего не просили

Тогда точно не Gtk3, Gtk4 и Qt.

Остаются варианты: Tk, Wx, FLTK, FOX toolkit, Gtk2

Novator ★★★★★
()
Ответ на: комментарий от DrBrown

Зачем ты ссылаешься на номера, если не понимаешь о чем речь? Все дистрибутивы Линукс, которые хоть сколько-нибудь можно назвать законченным продуктом, а не конструктором «Сделай сам», используют Gnome по умолчанию. И любой фреймворк, который хочет нативно выглядеть в Линуксе должен подстраиваться под Gnome/GTK. Это просто факт, с которым глупо спорить. То, что лично ты в своем i3/awesome/dwm нагородил кривую тему, лгбт-иконки и еще Бог знает что, не меняет сути.

Im_not_a_robot ★★★★★
()
Последнее исправление: Im_not_a_robot (всего исправлений: 1)

возможность запила бесконечной прокрутки длинной зарендеренной осциллограммы… много работать с 2D-сонограммами, спектрограммами: короче пиксели рисовать и двигать блоки пикселей.

ИМХО, имеет смысл посмотреть в сторону Dear ImGUI.

Ну а вот здесь хорошая подборка того, что есть вообще: https://philippegroarke.com/posts/2018/c++_ui_solutions/

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от grem

Нативным в смысле: «вам придётся немало повозиться, чтобы портировать своё приложение в другие ОС»?

В т.ч. Где-то это не так? ГТК хотя бы потенциально можно портировать на другие ОС, Вин/Мак приложения проще переписать.

Im_not_a_robot ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Для Qt хотя бы готовые инструменты есть. С другими так просто проще всё.

А так то можно, darktable разработчики не хотели даже портировать, пока доброволец не нашёлся. Автор abiword и gnumeric вообще забил на портирование из-за излишней возни с gtk3 при портированием и кривой работе приложения в windows.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Qt выглядит ужасно в линуксе. Я бы предпочел, чтобы существующие приложения Qt были на Gtk, пусть даже ценой кроссплатформенности. Хватит думать о других, думайте о своей платформе.

Im_not_a_robot ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Нормально он выглядит. Косяк в твоём дистрибутиве. У меня нет своей платформы. Qt раньше gtk в linux появился.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)

я предпочёл бы явно заинклудить libpng, libjpeg и поепацца с загрузкой файлов/ресурсов сам как удобно мне

Уволен. Нечего тратить время на то, что уже есть в Qt.

мне проще нафигарить простейший makefile

🤡

Наверное это GTK3? Или что?

Qt.

ox55ff ★★★★★
()

не содержащее в комплекте то, чего не просили (мне от гуи фреймворка не нужен звук, сеть и CSS/HTML5 рендерер)

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

от гуи фреймворка

Ну так Qt и не гуи-фреймворк, для гуи там ровно два модуля. Лично я помимо гуи плотно пользуюсь возможностями ядра, в частности, связкой QString/QStringList. Из коробки юникод, дробление/слияние, регистронезависимые операции, поддержка множества кодировок (правда, последнее в Qt6 решили поломать, но уже в 6.4 начали исправляться). std::string на этом фоне выглядит довольно бледно. Но если для научной тулзы тебе ничего этого не надо, то и не заморачивайся. Да, гуи без QtCore использовать не получится, но это единственный невыкидываемый модуль.

и мне не нравится богомерзкий CMake

Мне тоже, к счастью, в комплекте с кутями идёт лаконичный qmake. У него есть выбешивающие недостатки, но достоинства перевешивают.

я предпочёл бы явно заинклудить libpng, libjpeg и *** с загрузкой файлов/ресурсов сам как удобно мне

Вот в этом смысл бывает, на самом деле. Особенно если ты допускаешь, что на входе вместо валидного JPEG у тебя может оказаться изрядно замусоренный с битыми смещениями в таблицах (было у меня такое). В таком случае процесс декодирования лучше держать под контролем.

проприетарщицкие угрозы

Если ты свою продукцию собрался класть на гитхаб, тебя это не касается.

Грубо говоря, есть три категории разработчиков, применяющих Qt.

Первая — те, кто покупает коммерческую версию и делают с ней что хотят. Благодаря этим людям Qt развивается, в том числе и для применения в свободном ПО.

Вторая — те, кто пишет свободное ПО. Они используют Qt под GPL либо LGPL.

Третья — те, кто пишет проприетарное ПО, используя Qt под LGPL. Большинство из них честно соблюдают лицензию. Но для самих кутешников это самая бесполезная категория пользователей: нет ни денег, ни патчей, зато есть постоянная нагрузка на сервера. Поэтому именно эту категорию кутешники начали потихоньку ограничивать, в частности, убрали офлайновые инсталляторы из свободного доступа. Те, кто в качестве платформы разработчика использует линукс, разницы особо не почувствовали: как ставили из реп, так и ставят.

Соответственно, ещё раз: если ты что-то собираешься выкладывать под свободной лицензией, «проприетарщицкие угрозы» тебя не касаются.

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

Буду много работать с 2D-сонограммами, спектрограммами: короче пиксели рисовать и двигать блоки пикселей.

Хотя нет, наверное, не получится. :)

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)