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 05:29 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Я не владею С#. А QT мне не подходит, т.к. у меня gnome

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: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: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:47 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Сигналы и слоты есть и в чистом си :). Громадное спасибо. Пока буду RTFMить :)

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 - это опять всё с нуля учить, что влом.

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 04:47 am
Powered by Dreamwidth Studios