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)
Ответ на: комментарий от hobbit

я написал парой комментариев выше

Высосано из пальца.

вместо валидного JPEG у тебя может оказаться изрядно замусоренный

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

ox55ff ★★★★★
()

Оба хуже :) Эскобар же. Просто не делай их неотъемлемой частью, несущим скелетом, а в лучшем случае изолируй в слоях (особенно UI) и плугинах. И дропнуть или свичнуть при случае будет проще.

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

Qt выглядит ужасно в линуксе

В каком линуксе? С гнумом штоле? :)

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

wxWidget

но если серьезно то зачем писать онли под пингвина? ты же понимаешь что под сабж нет ни одного нормального ui фреймворка?

Unixson
()

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

традиционно Tcl/Tk, чтобы вся научность осталась в C++ и не путалась с Gui.

Максимум сложностей - сонограммы,спектрограммы,осцилограмы (не знаю в каком формате вы их храните и надо-ли будет рендерить в png, может готовое есть).

MKuznetsov ★★★★★
()

У гтк есть каиро для рисования 2д.крайне шустрый и при том простой. Ну и все что ты описал тем более есть, я бы рекомендовал.

А ещё можно отделить логику от интерфейса, оформить логику в либу и приделать к лазарусу. Простенько, понятно, классично и не подвержен влиянию корпораций)

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

Высосано из пальца.

Tell me more, это была реальная производственная задача.

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

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

поскольку приходила по ненадёжному каналу

Это и есть спец случай. За целостность должен отвечать транспортный уровень, а не прикладной, на котором работает библиотека для чтения изображений.

Tell me more

Высосано из пальца.

ox55ff ★★★★★
()

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

DumLemming ★★★
()

Или вообще не проще ли взять .NET а линуксоидов послать на три буквы посадить на обертку в wine и упаковать это все в appimage чтобы на их зоопарке это могло хоть как-то запускаться (хотя и то не факт что сможет)

Unixson
()
Ответ на: комментарий от ox55ff

Да-да, вот кутешники по такой же причине выкинули неюникодные кодировки из Qt6: уверовали, что их use case единственно верный, а остальные «высосаны из пальца».

Правда, к 6.4 их таки привели в чувство (подозреваю, что покупатели коммерческой версии), но поскольку они не вернули QTextCodec, а добавили это в QText**coder, теперь всё равно придётся класс-обёртку городить, чтобы прикладная программа предсказуемо собиралась с разными версиями Qt.

За целостность должен отвечать транспортный уровень

Должен, но не всегда может. В моём случае на том участке, который вносил ненадёжность, не было ни TCP/IP, ни вообще чего-либо, описываемого моделью OSI.

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

Проще тебя послать подальше с форума о линуксе с такими советами.

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

Прекрасно он выглядит, особенно если помнить, что Linux != GNOME.

Gnome наконец нам дал законченный продукт, а не пионерскую кринжовую поделку, которую стыдно людям советовать.

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

Когда его добавят (уже в мастере, дело за дистрибутивами) чем будете упрекать?

Это весьма потешно, как кдешники за горящей жопой бегают по треду и срут реакциями :)

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

выкинули неюникодные кодировки из Qt6

Правильно. 1%, которому они нужны, может скачать стороннюю библиотеку.

Должен, но не всегда может.

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

Т.е. в зависимости от фазы луны, файл как может быть восстановлен, так и нет. Как можно эксплуатировать эту систему? Т.е. потратили человекочасы на реализацию специальной библиотеки для чтения повреждённых файлов, но никаких гарантий не даёте. Завтра приходят требования о необходимости добавить новый формат файла. И что вы будете делать? Пол года писать очередную библиотеку? Очевидно, что вопросы целостности при передаче нужно возлагать на транспортный уровень.

На ваше счастье не я принимал работу, а то бы разнёс вашу говноархитектуру и отправил переделывать.

на том участке, который вносил ненадёжность, не было ни TCP/IP

Это делается проще, чем спец библиотека на каждый формат данных. Если канал двусторонний, то сообщаем передающей стороне у каких блоков не сошлась контрольная сумма. Если канал односторонний, то сразу передаём данные с избыточностью и спец кодированием, которое с помощью избыточной информации сможет восстановить данные. Объём избыточности выбирается исходя из качества канала.

Прикладной уровень живёт в мире розовых поней и ничего не знает про хреновые каналы передачи данных.

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

Глобальным меню, его отсутствием.

Это весьма спорная идея. Кроме Мака его нигде по дефолту нет и не ясно насколько оно удобно.

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

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

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

Я видел кучу кдешных программ и место в них используется МЯГКО ГОВОРЯ не эффективно.

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

На ваше счастье не я принимал работу

Этот участок и всё, что ДО него вообще лежал вне нашей работы. У нас исходными данными было то, что вот, данные приходят, данные могут быть ненадёжными, перезапросить нельзя, работайте с тем, что есть.

Да, и такое бывает.

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

Кроме Мака его нигде по дефолту нет и не ясно насколько оно удобно.

(про глобальное меню) Оно удобно. Но везде кроме Maс глючит. И гарантирует синкразию при тайловых ВМ.

То есть если работу работать, удобно; А если слева мы кодим, а справа аудио-плеер и весёлый чатег, то увы

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

И гарантирует синкразию при тайловых ВМ.

А кстати, вот про этот пункт можно подробнее?

На мой взгляд, сочетание тайлинга с глобальным меню выглядело бы очень красиво и обеспечивало максимальное единство рабочего стола. Но это в теории. Может, оно просто ни в одном тайловом WM просто не работает толком?

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

Глобальное меню возможно только в сочетании с автократией, в которой кнут и кнут потолще. Которая сделала бы существование тайлинговых ВМ невозможными в принципе. Даже в Винде это невозможно нормально сделать. Тут либо швабода, либо консистентность.

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

Был же какой-то API, который позволяет сделать системе известными нужные программе Action-ы. Более того, его название на ЛОРе кто-то недавно приводил, но я успешно забыл.

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

А кстати, вот про этот пункт можно подробнее?

когда несколько разных тайлов, нихрена неявно к которому из них соотнести глобальное меню. И рамки у них тонкие (а то и нету вовсе) и которому принадлежит фокус неявно.

Чисто юзабилити - тайлинг и глобальное меню из разных ипостасей. Глоб меню удобно когда работаешь в основном в одном приложении (на основную площадь экрана, все прочие - а-ля «иллюстрации» по бокам) и время-от времени переключаешься в другое. Тогда удобно - всё всегда на своём месте, меню - всегда сверху.

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

PS/ экраны стали большими (и их стало много, больше 1-го уже давно не экзотика), а UI за ними не угнался. И глоб меню и тайлинг, разные плоды одного и того-же.

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

GTK у меня выглядит как говно, ибо KDE. Qt для меня получается основной тулкит. А GTK4 выглядит как эпичное говно.

Werenter ★★☆
()

Господули, всем привет, я автор треда. Поигрался с FTLK - нативное C++ поделие, весьма минималистично. Вполне устраивает! Пока свой пример собрать обосрался, но примеры выглядят многообещающе.

trisobakov
() автор топика

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

Jupyter Notebook ещё никто не предложил?

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

Мне надо сделать такое: https://www.youtube.com/watch?v=K4jEPT8SO0g - см на экран чувака

Там рисуется такая бесконечная простыня пикселей, которая ползёт вниз.

Только у меня она может ползти вниз в 100 раз быстрее, да ещё уметь быть остановленной и прокрученной на 100 экранов туда-обратно.

Короче тут числодробилка чисто в графике.

trisobakov
() автор топика
Ответ на: комментарий от snizovtsev

Я такое на qt делал. Представляю как это делается: у тебя просто цепочка блоков - каждый блок шириной в экран, а высотой скажем 128 пикселей. Ты их заполняешь и линкуешь друг за другом. Экран - как плитка из этих блоков. Всего блоков штук 1000 в запасе. Как только все изрисовал - начинаешь самые старые выдёргивать и переиспользовать сверху. Ну короче понятно.

trisobakov
() автор топика
Ответ на: комментарий от DumLemming

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

Кстати да. Вероятно так надо пойти.

trisobakov
() автор топика

Я в подобной ситуации выбрал SDL2 - минимальный и дубовый. В основной библиотеке даже вывода текста нет. Можно подключить дополнительную библиотеку для векторных шрифтов. Но я сделал собственный растровый.

Но да, FLTK, вероятно, минималистичнее при больших возможностях.

Kogrom
()

давай так:

  1. Qt — это стандарт де-факто для плюсового гуя. Я понимаю, что есть конечно ещё очень упертые, кто пилит на GTK или (совсем отбитые) под винду на каких-нибудь фреймворках, но Qt работает реально везде и реально хорошо.

  2. Electron реально рулит. Докидываешь себе нужных бинарных библиотек, остальное делает штатным образом фронтендер и всё ок.

Всё остальное не очень понятно, зачем.

max_lapshin ★★★★★
()

что минималистичнее

оберон

дубовее

дубы

живучее

время покажет... и наверняка тоже дубы

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

Я в подобной ситуации выбрал SDL2 - минимальный и дубовый. В основной библиотеке даже вывода текста нет.

Есть ещё SFML, в нём вроде есть примитивы для GUI. А на SDL (+Python) написан музыкальный плеер Tauon Music Box, тоже можно подсмотреть реализацию.

alex1101
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.