Графический интерфейс в Linux
Dec. 15th, 2011 03:23 amGTK+ vs curses
На самом деле нельзя сравнивать несравнимое. Но всё же. Попробовал я расурить гтк+, это оказался адский ад. При чём, что вот так простенько набросать на форму нельзя. Там какие-то адские боксы и т.п. Тупо батоны на форму накидать нельзя, надо поместить её в соответствующий отсек. Плюс, если и есть glade, который бросает на форму, то он генерит xml файл, который тоже надо обрабатывать. В общем взрыв мозга, тем более полное отсутствие толковых доков на русском, как юзать этот глейд и т.п. В результате я сделал на ГТК+ вот такую программу, которая визуализирует любой файл или устройство:

Да, это просто панелька с графиком и всё
На ней нет ни единой кнопки ничего. Я лукавлю, ибо скриншотом я обрезал верхнюю панель с названием программы и кнопками свернуть, развернуть и закрыть. Разумеется это программа не написанна с нуля, а переделанная чья-то (если актуально, я приведу пруфлинки). Когда я решил расширить её функционал, добавить пипочки, прокрутки, форточки, то лососнул тунцов в чтении мануалов. В результате пока обходился сухой консолью (printf и иже с ним) и gnuplot в вылетающем окошке. Но потом таки и консоли стало мало. Захотелось видеть и данные, и возможность отдельного ввода и редактирования параметров, не прерывая работы программы. И тогда я решил раскурить curses. Несколько часов курения манов (это оставлю здесь http://ftp.linux.kiev.ua/pub/docs/developer/libs/ncurses.html ), экспериментов, рисования интерфейса на листочке, отлова блох, снова курения манов и вон он, интерфейс моей мечты (тут за кадром крик Ияяяязь!!!)

Из говна и палок
Разумеется, это костыли. И в перспективе я надеюсь изучить gtk+, но пока во первых не встречал СВЕЖИХ (!!!) мануалов по теме (а не от 2000 года) и хороших примеров. Впрочем на данный момент данный интерфейс устроит меня чуть более, чем полностью :).
З.Ы. Прошу прощения за поток сознания, просто хочется высказаться миру. Кто в теме, тот поймёт, а кто не в теме и ладно :).
З.З.Ы. Принимаются пожелания, как лучше сделать рамочку у окон. Если, что, то это линух и тут нортон-коммандировские символы кажись отсутствуют :(((.
На самом деле нельзя сравнивать несравнимое. Но всё же. Попробовал я расурить гтк+, это оказался адский ад. При чём, что вот так простенько набросать на форму нельзя. Там какие-то адские боксы и т.п. Тупо батоны на форму накидать нельзя, надо поместить её в соответствующий отсек. Плюс, если и есть glade, который бросает на форму, то он генерит xml файл, который тоже надо обрабатывать. В общем взрыв мозга, тем более полное отсутствие толковых доков на русском, как юзать этот глейд и т.п. В результате я сделал на ГТК+ вот такую программу, которая визуализирует любой файл или устройство:

Да, это просто панелька с графиком и всё
На ней нет ни единой кнопки ничего. Я лукавлю, ибо скриншотом я обрезал верхнюю панель с названием программы и кнопками свернуть, развернуть и закрыть. Разумеется это программа не написанна с нуля, а переделанная чья-то (если актуально, я приведу пруфлинки). Когда я решил расширить её функционал, добавить пипочки, прокрутки, форточки, то лососнул тунцов в чтении мануалов. В результате пока обходился сухой консолью (printf и иже с ним) и gnuplot в вылетающем окошке. Но потом таки и консоли стало мало. Захотелось видеть и данные, и возможность отдельного ввода и редактирования параметров, не прерывая работы программы. И тогда я решил раскурить curses. Несколько часов курения манов (это оставлю здесь http://ftp.linux.kiev.ua/pub/docs/developer/libs/ncurses.html ), экспериментов, рисования интерфейса на листочке, отлова блох, снова курения манов и вон он, интерфейс моей мечты (тут за кадром крик Ияяяязь!!!)

Из говна и палок
Разумеется, это костыли. И в перспективе я надеюсь изучить gtk+, но пока во первых не встречал СВЕЖИХ (!!!) мануалов по теме (а не от 2000 года) и хороших примеров. Впрочем на данный момент данный интерфейс устроит меня чуть более, чем полностью :).
З.Ы. Прошу прощения за поток сознания, просто хочется высказаться миру. Кто в теме, тот поймёт, а кто не в теме и ладно :).
З.З.Ы. Принимаются пожелания, как лучше сделать рамочку у окон. Если, что, то это линух и тут нортон-коммандировские символы кажись отсутствуют :(((.
no subject
Date: 2011-12-15 12:42 am (UTC)ЗЫ в том же midnight commander используется ncurses для отрисовки окошек с рамочками - можно там подсмотреть какие символы они используют.
no subject
Date: 2011-12-15 01:04 am (UTC)no subject
Date: 2011-12-15 03:31 am (UTC)no subject
Date: 2011-12-15 03:48 am (UTC)no subject
Date: 2011-12-15 05:29 am (UTC)no subject
Date: 2011-12-15 05:29 am (UTC)no subject
Date: 2011-12-15 05:39 am (UTC)no subject
Date: 2011-12-15 05:39 am (UTC)no subject
Date: 2011-12-15 06:04 am (UTC)no subject
Date: 2011-12-15 06:33 am (UTC)no subject
Date: 2011-12-15 07:08 am (UTC)Только не надо предрассудков по поводу убогово вида, вполне можно допилить, что бы выглядело так же как gtk или qt.
no subject
Date: 2011-12-15 07:10 am (UTC)no subject
Date: 2011-12-15 07:20 am (UTC)no subject
Date: 2011-12-15 07:21 am (UTC)no subject
Date: 2011-12-15 07:23 am (UTC)Под каждую задачу свой язык. С хорош для embedded, time-critical, для всякой гуйни правильнее и быстрее на плюсах. Благо, что он обратно совместим с С.
> Чтобы писать на QT надо его по крайне мере знать.
Чтобы сделать софтину вышеприведенного типа - не обязательно :) Быстренько натыкал мышкой в дизайнере, накликал методов и спокойно вызываешь свои сишные обработчики. Под кьютом скорость разработки просто космическая.
no subject
Date: 2011-12-15 07:29 am (UTC)no subject
Date: 2011-12-15 07:29 am (UTC)но tcl это tcl.
можно и на с написать.
no subject
Date: 2011-12-15 07:50 am (UTC)В кьютовых плюсах, естественно, есть потоки, евенты и мьютексы. Причем, намного вкуснее сишных. Например, в кьюте есть автолокеры с деструктором, который освобождает мьютекс. Т.е. если лочишь какой-нибудь мьютекс в локальной процедуре и, тупо забыл его освободить, при выходе деструктор освободит его сам. Это просто как пример - в плюсах таких плюшек тысячи и они сильно упрощают жизнь.
no subject
Date: 2011-12-15 08:31 am (UTC)no subject
Date: 2011-12-15 08:49 am (UTC)Я крайне рекомендую делать подобные вещи изначально по этому паттерну. Тогда можно привязывать любой интерфейс к уже готовой модели. Модель можно написать и на C, не проблема. В крайнем случае всегда можно сделать обертку на кьюте.
Сокеты не нужно использовать, они медленные. В кьюте есть очень удобная вещь - сигналы/слоты.
no subject
Date: 2011-12-15 09:35 am (UTC)no subject
Date: 2011-12-15 09:47 am (UTC)no subject
Date: 2011-12-15 09:51 am (UTC)no subject
Date: 2011-12-15 10:14 am (UTC)no subject
Date: 2011-12-15 10:18 am (UTC)no subject
Date: 2011-12-15 10:30 am (UTC)no subject
Date: 2011-12-15 11:00 am (UTC)В частности ты хочешь сделать консольное приложение, потом его использовать для гуи. В то время как MVC предполагает выделить модель и на базе нее сделать два приложения - одно гуи, одно консольное, нужно сделать просто два разных представления и контроллера.
no subject
Date: 2011-12-15 11:07 am (UTC)Вопрос в том, как лучше реализовать их взаимодействие. К примеру, моё приложение использыет gnuplot для отображения графиков. Я же не реализовывал его в своей программе, просто сделал удобное обращение к нему. Просто взяв примеры из мануалов и аналогичных программ.
no subject
Date: 2011-12-15 11:16 am (UTC)Для графиков есть qwt. http://qwt.sourceforge.net/
no subject
Date: 2011-12-15 11:32 am (UTC)no subject
Date: 2011-12-15 08:36 pm (UTC)no subject
Date: 2011-12-16 05:42 am (UTC)no subject
Date: 2011-12-16 07:05 am (UTC)no subject
Date: 2011-12-16 10:02 am (UTC)Кроме графического тулкита включает множество других полезных вещей(удобные stl-подобные стандартные контейнеры, работа с сеть, xml, графикой, etc).
Среда разработки(QtCreator) заточено именно под Qt, отличный инструмент.
И самая лучшая документация которую я только видел для такого рода вещей.