dlinyj: (Default)
[personal profile] dlinyj
GTK+ vs curses

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


Да, это просто панелька с графиком и всё

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


Из говна и палок

Разумеется, это костыли. И в перспективе я надеюсь изучить gtk+, но пока во первых не встречал СВЕЖИХ (!!!) мануалов по теме (а не от 2000 года) и хороших примеров. Впрочем на данный момент данный интерфейс устроит меня чуть более, чем полностью :).

З.Ы. Прошу прощения за поток сознания, просто хочется высказаться миру. Кто в теме, тот поймёт, а кто не в теме и ладно :).
З.З.Ы. Принимаются пожелания, как лучше сделать рамочку у окон. Если, что, то это линух и тут нортон-коммандировские символы кажись отсутствуют :(((.

Date: 2011-12-15 12:42 am (UTC)
From: [identity profile] uglock.livejournal.com
А GTK - это критично? Я туда както давно смотрел - ад и израиль какойто. QT? Mono? Под моно уже можно писать на C# - быстрее и гемора меньше с тем же memory management.

ЗЫ в том же midnight commander используется ncurses для отрисовки окошек с рамочками - можно там подсмотреть какие символы они используют.

Date: 2011-12-15 01:04 am (UTC)

Date: 2011-12-15 03:31 am (UTC)
From: [identity profile] cluster-d.livejournal.com
+1 к Mono, тем более мультиплатформенно.

Date: 2011-12-15 03:48 am (UTC)
From: [identity profile] cluster-d.livejournal.com
Вообще, Линукс и GUI - вещи не очень совместимые, ИМХО.

Date: 2011-12-15 05:29 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Я не владею С#. А QT мне не подходит, т.к. у меня gnome

Date: 2011-12-15 05:29 am (UTC)
From: [identity profile] dlinyj.livejournal.com
gnome :)

Date: 2011-12-15 05:39 am (UTC)
From: [identity profile] dlinyj.livejournal.com
По поводу миднайта - там всё ясно, может какие особые пожелания будут :)

Date: 2011-12-15 05:39 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Ага, три года под линукс. Даже гамаю здесь в, о боже, графические игры!(warsow, nexuis)

Date: 2011-12-15 06:04 am (UTC)
From: [identity profile] Шура Люберецкий (from livejournal.com)
А это критично? Вроде как Qt "независим" от оконного менеджера.

Date: 2011-12-15 06:33 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Чтобы писать на QT надо его по крайне мере знать. Потом, львиная доля кода у меня уже написанна на си. И переписывать его на QT неразумно, плюс вероятно будет необходимость, чтобы код был портирован на ARM-MIPS устройства.

Date: 2011-12-15 07:08 am (UTC)
From: [identity profile] sergio.livejournal.com
Освой tk. (tcl-tk или python tkinter, или кто там ещё есть)
Только не надо предрассудков по поводу убогово вида, вполне можно допилить, что бы выглядело так же как gtk или qt.

Date: 2011-12-15 07:10 am (UTC)
From: [identity profile] cluster-d.livejournal.com
Угу, и мне это кажется извратом. Особенно игры. Хотя игры под Windows - это не меньший изврат.

Date: 2011-12-15 07:20 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Мне кажется извратом только игры на телефоне :). Я с трудом себе представляю те игры в которые я играю на всяких консолях.

Date: 2011-12-15 07:21 am (UTC)
From: [identity profile] dlinyj.livejournal.com
дык енто ж питон?

Date: 2011-12-15 07:23 am (UTC)
From: [identity profile] mbr.livejournal.com
Да пофигу, что гном. У меня вообще lxde. qt будет работать везде, где есть линукс, ну, или винда.

Под каждую задачу свой язык. С хорош для embedded, time-critical, для всякой гуйни правильнее и быстрее на плюсах. Благо, что он обратно совместим с С.

> Чтобы писать на QT надо его по крайне мере знать.

Чтобы сделать софтину вышеприведенного типа - не обязательно :) Быстренько натыкал мышкой в дизайнере, накликал методов и спокойно вызываешь свои сишные обработчики. Под кьютом скорость разработки просто космическая.

Date: 2011-12-15 07:29 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Эм... Задумался. А то, что я с железом там работаю, ничего? Думаю надо сделать универсальную программулину, чтобы можно было поверх куте подкрутить :). Я просто пишу на чистом си, событиями, потоками и т.п. вкусняшками. Сомневаюсь, что без геммороя смогу всё это вставить в куте.

Date: 2011-12-15 07:29 am (UTC)
From: [identity profile] sergio.livejournal.com
tkinter --- питон, да.
но tcl это tcl.
можно и на с написать.

Date: 2011-12-15 07:50 am (UTC)
From: [identity profile] mbr.livejournal.com
qtopia же :) Изначально кьют был заточен под embedded - там нет exception. С одной стороны это жутко неудобно для app уровня, с другой - это до +5-10% производительности для медленных однокристалок.

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

Date: 2011-12-15 08:31 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Я бью челом за наводку. Скорее всего, там где я буду использовать, графики не будет в помине. Я думаю сделать хитрее. Сделать консольную программу на сях, а по верх неё уже создать графический интерфейс на QT. Единственное, что смущает, это как реализовать взаимодействие между ними. Пока кроме сокетов ничего на ум не идёт.

Date: 2011-12-15 08:49 am (UTC)
From: [identity profile] mbr.livejournal.com
Боюсь, ты изобретаешь велосипеды. Все уже давно придумано. Называется MVC http://ru.wikipedia.org/wiki/Model-View-Controller

Я крайне рекомендую делать подобные вещи изначально по этому паттерну. Тогда можно привязывать любой интерфейс к уже готовой модели. Модель можно написать и на C, не проблема. В крайнем случае всегда можно сделать обертку на кьюте.

Сокеты не нужно использовать, они медленные. В кьюте есть очень удобная вещь - сигналы/слоты.

Date: 2011-12-15 09:35 am (UTC)
From: [identity profile] terrakots.livejournal.com
Честно рад за тебя)) Теперь знаю, у кого буду спрашивать, ибо тема интересная)

Date: 2011-12-15 09:47 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Сигналы и слоты есть и в чистом си :). Громадное спасибо. Пока буду RTFMить :)

Date: 2011-12-15 09:51 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Да пока нечего спрашивать, я только учусь

Date: 2011-12-15 10:14 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Прочитал про эту модель и нихрена не понял, т.е. абсолютно.

Date: 2011-12-15 10:18 am (UTC)
From: [identity profile] mbr.livejournal.com
смысл в том, что ты разделяешь программу на три части - модель (фактическую работу), представление (gui) и контроллер (ввод с клавиатуры и т.д.). Описываешь интерфейсы взаимодействия между тремя частями приложения.

Date: 2011-12-15 10:30 am (UTC)
From: [identity profile] dlinyj.livejournal.com
По моему это очевидно, разве нет?

Date: 2011-12-15 11:00 am (UTC)
From: [identity profile] mbr.livejournal.com
раз ты пытаешься городить велосипеды, то нет ;)

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

Date: 2011-12-15 11:07 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Я не знал об этой модели, но хотел сделать так: Приложение, которое выполняет мои задачи. Плюс к нему отдельный графический интерфейс. При чём, работоспособность приложения должна быть не связанна с гуями. Физически разные программы.

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

Date: 2011-12-15 11:16 am (UTC)
From: [identity profile] mbr.livejournal.com
а, ну это совсем другая вещь. Если мы берем данные из сторонней программы - там действительно придется либо сокеты городить, либо консольный вывод перенаправлять. В кьюте еще есть такая полезная вещь, как шареная память. Но это предполагает, что оба приложения написаны с использованием qt. Как ни странно, но консоль тоже проще реализовывать на плюсах + буст, либо кьюте. Посмотри, сколько всего вкусного обещает QString по сравнению с char*

Для графиков есть qwt. http://qwt.sourceforge.net/

Date: 2011-12-15 11:32 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Спасибо за рекламу :). Я учту, просто QT - это опять всё с нуля учить, что влом.

Date: 2011-12-15 08:36 pm (UTC)
From: [identity profile] guman0id.livejournal.com
А я когда-то делал ncurses-подобный интерфейс с нуля )) там можно было двигать окна, ресайзить, выводить на передний план и всё такое.

Date: 2011-12-16 05:42 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Крут, но зачем, когда всё придумано за нас? :)

Date: 2011-12-16 07:05 am (UTC)
From: [identity profile] guman0id.livejournal.com
Просто для обучения.

Date: 2011-12-16 10:02 am (UTC)
From: [identity profile] fas-tm.livejournal.com
Qt хорош. Под линукс - тем более.
Кроме графического тулкита включает множество других полезных вещей(удобные stl-подобные стандартные контейнеры, работа с сеть, xml, графикой, etc).
Среда разработки(QtCreator) заточено именно под Qt, отличный инструмент.
И самая лучшая документация которую я только видел для такого рода вещей.

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 23rd, 2026 06:29 am
Powered by Dreamwidth Studios