LINUX.ORG.RU

Разработка программы с графическим интерфейсом (советы)

 , , , ,


4

4

Всем привет, ребят. Недавно окончательно переехал с винды на линукс на основной рабочей лошадке. Разработкой никогда не занимался ранее, но скриптовал немного на perl, python и lua. У меня есть задумка небольшой программы с ГУИ, но т.к. в вопросе не имею экспертизы, прошу совета о тех, кто имеет.

Мои хотелки:

  1. Не слишком сложный (низкоуровневый) язык.
  2. Возможность компиляции в один файл. Для меня и для тех, кто будет использовать (устанавливать) это важно. Одна из причин, почему не хочу использовать тот же python.
  3. Простая кроссплатформенность разработки (линукс и винда).
  4. Наверное максимальная независимость от сторонних библиотек, чтобы не попасть в неприятную ситуацию.
  5. Удобная разработка на линуксе. На винде буду только пересобирать, если это потребуется, и тестировать.

Программа сама по себе, наверное, несложная… В основном это заполнение форм различными данными (текст, цифры), вычисление формул, хранение данных в какой-нибудь sqlite или на худой конец в csv файле, построение и отображение графиков и таблиц с удобным редактированием и занесением данных.

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

Дайте, пожалуйста, ваши рекомендации по языку и, возможно, фреймворку.

Читаю сам информацию в интернете. Насколько я могу судить по прочитанному, мне возможно подойдет С++ с фреймворком Qt. На форуме тоже видел одну или две темы, где такую связку советовали.

Да, к слову, с вебом и веб технологиями связываться вообще не хочу.

Система Linux Mint 21.3.

А что за программа? Описание выглядит так, будто веб подойдет больше…

В целом тред, конечно, демонстрирует фриковатость публики. За то и любим, где ж еще RED посоветуют.

Неясно, насколько (и зачем) низкоуровневый язык нужен. Если надо прям низкоуровневый, без существенного рантайма, то без ухода в эзотерику выбирать надо из С, С++, и Rust. Но тут везде трудности с «несложный».

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

Как человек до фига написавший кода на C++ и прочих мейнстримных языках с GC все более и более нахожу, что писать гуй на C++/Qt та еще фриковатость! И ведь пишут же!

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

Да и на работе так надоест этот C++, что какой-нибудь красивый (по твоему, фриковатый), но не очень популярный язык, вполне может стать отдушиной, к которой будет интересно возвращаться и возвращаться, а это очень важно, когда пилишь проект, за который не платят. Может быть, это сверх важно.

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

Ну вот я и не понимаю, зачем «низкоуровневый». Но в вопросе это требование было явно упомянуто.

К мотивации фриковатости замечаний не имею, факты.

akho
()
Ответ на: комментарий от monk

Практически являются

лол, нет

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

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

Фактически, есть два города

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

в одном в буклете…

в одном буклете тебе вешают лапшу, как последнему лоху, а в другом - общаются по-мужски прямо: если делать вот так - хз чё будет, так что лучше так не делать

поймают тебе грабителей, бугага, сказочный))

anonymous
()
Ответ на: комментарий от monk

У меня сообщалка на Racket уже восемь лет работает стабильно и надёжно (ни одной порчи данных, сервер Linux, клиенты Linux и Windows).

А написанный на Си++ Adobe Acrobat Reader на оффтопике регулярно выдаёт «Код исключения: 0xc000041d» и падает.

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

уровень дискуссии как обычно

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

лол, нет

У тебя на какой-то программе модульные тесты через раз работают?

поймают тебе грабителей, бугага, сказочный))

Пока все ошибки, найденные в ракете, чинят (так же как и в питоне и в джаве). Только на Си/Си++ считают, что это не баг, а фича.

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

Только на Си/Си++ считают, что это не баг, а фича

кто и где называет это фичами, сказочный?

все ошибки, найденные в ракете чинят (так же как и в питоне и в джаве)

сразу так спокойно на душе стало! прям как от прочтения лоховского буклетика

а главное: што джава, што питон - это ж прямой аналог плюсам, лол

рэкет это вообще какая-то игрушка для студентов и пердолей, существует с 94 года, а в индустрии так же заметен, как форт

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

кто и где называет это фичами, сказочный?

Стандарт, в котором UB считается правильным результатом компиляции.

а главное: што джава, што питон - это ж прямой аналог плюсам, лол

Если скорость работы не является критично важной, то они намного лучше плюсов.

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

Стандарт, в котором UB считается правильным результатом компиляции

фича в том, что компилятор не пытается быть умнее разработчика, а не в самих UB, это лишь следствие

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

Если скорость работы не является критично важной, то они намного лучше плюсов

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

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

нет ли связи между скоростью плюсов и отсутствием в них памперсов

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

Но если тебе надо съездить на дачу, выбирать для этого гоночный автомобиль мягко говоря странно.

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

monk ★★★★★
()

Пара слов о кроссплатформенности.

  1. Linux и Windows - это неопределённо. Если требуется поддержка Windows 7 или какой-нибудь Астры, в которой сильно устаревшие библиотеки, то могут быть сюрпризы. Какой-нибудь последний PyQt просто не будет работать.

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

Если говорить о «живучести в плане обновления всяких версий», то тут Tkinter (tk) хорошо себя показывает. Ну или можно в каком-нибудь SDL2 интерфейс рисовать ручками. Тогда и живучесть будет, и внешний вид в разных ОС одинаковый.

Kogrom
()
Ответ на: комментарий от Kogrom
  1. Racket будет. Даже на Windows XP и в линуксе с GTK-2.

  2. Шрифты побороть можно, кнопки нет. Банальная кнопка OK на линуксе, в Windows XP и Windows 10 заметно отличается. В том числе размером.

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

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

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

anonymous
()
Ответ на: комментарий от monk

перепиши всё на Си++

У меня и так практически весь используемый софт написан либо на сишке, либо на плюсах. КДЕшник я.

Вот щас пробежался глазами по установленным приложениям и не увидел ни одного на питоне и прочих ползучих гадах.

Где-то в недрах системы есть скриптовая лапша, да. К сожалению.

Ну ок, ещё QML есть в кедах. Но это более-менее терпимо. В KDE 6 он сносно работает и выглядит.

RedHat, Ubuntu и Gentoo совсем не пользуешься?

Нет. Арч наше всё.

anonymous
()
Ответ на: комментарий от monk

Шрифты побороть можно, кнопки нет. Банальная кнопка OK на линуксе, в Windows XP и Windows 10 заметно отличается. В том числе размером.

Ну, рисуй не кнопку, а button из четырех палочек с буквами внутри и реакцией на клик. Не умеешь?

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

Ну, рисуй не кнопку, а button из четырех палочек с буквами внутри и реакцией на клик. Не умеешь?

Тогда твоё приложение будет инородным и выбиваться из общего стиля.

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

Вот это потому, что как в анекдоте:

«Я же говорил, что врач должен быть внимательным: я ведь засовывал палец один, а облизывал другой…»

Нужно так:

    std::map<std::string, int> counters = { {"hello", 5}, {"world", 5} };
    std::vector<std::string_view> keys;
    keys.reserve(counters.size());
    std::transform(std::begin(counters),
                   std::end(counters),
                   std::back_inserter(keys),
                   [](const std::pair<const std::string, int>& item) -> std::string_view {
                       return item.first;
                   });

    for (std::string_view k : keys) {
        std::cout << k << "\n";
    }

Потому что из описания std::map:

value_type std::pair<const Key, T>

Т.е. в твоем случае ты копируешь пару внутри лямбды и возвращаешь string_view, который указывает на скопированную временную переменную.

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

Ага. Вот только при беглом чтении среди сотни тысяч строк как такое углядеть? Хорошо, сейчас хот какие-то санитайзеры в компиляторах появились, а раньше просто программа падает (причём не в этом цикле, а вообще в другом месте), gdb показывает испорченные стек и искать ошибку только по частям заменяя код на заглушки.

Собственно, именно поэтому придумали Java.

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

Так никто не утверждал, что на C++ можно писать не понимая, как оно работает. Да, нужно вникать в то, что код делает. Глупо приводить ошибочный код и заявлять, а вот видите, какая херня!!!

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

Собственно, именно поэтому придумали Java.

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

Кроме того баги могут быть в реализации того же js или его библиотек. Вот например свежий баг, который я нашел в Qt, а оказалось, что это даже не в Qt, а в движке Chromium https://bugreports.qt.io/browse/QTBUG-125108.

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

Если говнокодить, то можно в той же бизнес логике лохануться или забить на сложность аглоритмов и получить тормоза и т.п…

В том-то и дело. В Java или лиспе в худшем случае получишь тормоза или падение в той точке, где ошибка. В Си++ получаешь падение (в лучшем случае) или порчу данных в произвольной точке программы.

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

Так логика та же самая. Предметы одежды не должны раздражать.

Если у тебя в ОС, например, тёмная тема, а автор программы решил, что ему системные настройки не указ, это раздражает. Также и с кнопками: если кнопка системная, её можно нажать скриптом и при удалённом доступе она передаётся описанием из строки и восьми чисел. Если это картинка, то только нажимать по координатам и при удалённом доступе она передаётся как картинка.

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

Если человек не клоун - он не занимается клоунской демагогией как у тебя.

одежда должна быть в едином стиле

Во-первых, кому должна? Ты из этих, сладеньких, которые шмотом озабочены?

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

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

Как ты вообще программируешь с такой кашей в башке? Кринжово читать твои «доводы».

anonymous
()
Ответ на: комментарий от monk

Это конечно не лишено логики, но тот же вебчик не фига не хочет учитывать настройки системы.

А еще есть ограничения настраиваемости цветов в той же винде современной (11). Также тонко настроить цвета элементов (кнопок, полей ввода и т.п.) как во времена xp нельзя, потому что идиотская политика компании считает, что юзеры стали идиотами и много настроек не могут осилить. Поэтому приложения могут своими силами компенсировать ограничения системы.

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

Еще, если бы ты написал проще:

[](const auto& item) -> std::string_view {
    return item.first;
});

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

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

Это конечно не лишено логики, но тот же вебчик не фига не хочет учитывать настройки системы.

Есть UserCSS.

Также тонко настроить цвета элементов (кнопок, полей ввода и т.п.) как во времена xp нельзя, потому что идиотская политика компании считает, что юзеры стали идиотами и много настроек не могут осилить. Поэтому приложения могут своими силами компенсировать ограничения системы.

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

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

Это конечно не лишено логики, но тот же вебчик не фига не хочет учитывать настройки системы.

И получается такое говно: https://avatars.mds.yandex.net/get-znatoki-cover/1357594/2a0000017a4d435b713f99e95c98cbc57616/orig

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

Есть UserCSS.

Ага, прям все его юзают.

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

Тут согласен. Но тот же вебчик тоже болт клал на это.

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

Ага, прям все его юзают.

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

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

Стандарт, в котором UB считается правильным результатом компиляции

фича в том, что компилятор не пытается быть умнее разработчика

Задача UB в стандарте - не обременять понапрасну разработчиков компилятора, дав им возможность использовать какие угодно оптимизации. Т.е., компилятор «не пытается быть умнее разработчика», он кладёт на него болт.

anonymous
()
Ответ на: комментарий от monk

И во всех одинаково чужеродный и тормозной. Java Swing так делали.

Я не знаю, что там в Swing было, но на SDL2 ничего не тормозит, особенно, если использовать растровые шрифты. Про чужеродность расскажите разработчикам Blender, например. Да даже Gimp в Windows чужеродным выглядит. И ничего.

Сейчас ещё часто делают одно приложение на один компьютер, когда пользователь может даже не догадываться, какая там ОС. Тут о чужеродности можно не думать. Лишь всё было интуитивно понятно.

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

Конечно, обычно лучше взять какую-нибудь популярную GUI библиотеку и тестировать ПО в разных ОС, подпиливая ручками до адекватного вида. Рисование я привёл как альтернативу, которая может быть удобнее в определённых случаях.

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

Я помню, как загружалась самая первая демка Swing. Это был год 1998 или 1997. Передавалось из в руки как откровение, как новое слово в GUI-строении. Так вот, загрузки SwingSet2, или как оно тогда называлось, нужно было ждать минуты три-пять, тупо пялясь на экран и оставаясь все это время очарованным их сплеш-скрином. Я не думаю, что Swing стал сильно быстрее - компьютеры вот ускорились.

И еще настораживающая тенденция. В GTK3 была нормальная отрисовка через clip-rectangle. А что натворили в GTK4? Так с ходу пока и не разобрался. Какая странная тенденция уходить в сторону model scene по типу WPF и HTML5 Canvas! Не скажу, что это прямо такой прогресс. Элементы регресса тоже определенно присутствуют, причем именно технического регресса, хотя может быть, что программировать и стало по-легче, но это тоже вопрос.

anonymous
()