Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Обсуждение исходников с сайта _ Эмулятор терминала на qt4

Автор: un-defined 8.7.2008, 23:49

Есть проект виджета эмулятора терминала, написанный на qt4. Но некроссплатформенный, потому как использует системные вещи. Это будет интересно кому-нибудь?
Может кто-нибудь сможет его под mingw собрать? я не могу, за неимением windows, так что просто не в курсе, как там что в mingw устроено.

Если что - ссылка вот:
http://sourceforge.net/projects/qtermwidget

Автор: ViGOur 9.7.2008, 8:02

А поподробней описание?

Просто с нынешним описанием не понятно, в чем его вкусность! :)

Автор: un-defined 9.7.2008, 8:54

Вкусность в том, что его можно встраивать в свои приложения именно как обычный виджет qt. При этом он никак не зависит от KDE, хотя и сделан на основе konsole. Ну и поддержка unicode вроде бы тоже имеется.

Автор: void* 9.7.2008, 9:35

очень интересная вещица, надо будет взглянуть :)
насколько я понял это под *nix?

Автор: Гость 9.7.2008, 12:06

Неплохо.
Собралось и заработало с Qt 4.3.1, правда debug пример не линкуется, только резиловый создается.

Цитата
`.L187' referenced in section `.rodata' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o): defined in discarded section `.gnu.linkonce.t._ZNK7Konsole14CharacterColor5colorEPKNS_10ColorEntryE' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o)
`.L179' referenced in section `.rodata' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o): defined in discarded section `.gnu.linkonce.t._ZNK7Konsole14CharacterColor5colorEPKNS_10ColorEntryE' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o)
`.L182' referenced in section `.rodata' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o): defined in discarded section `.gnu.linkonce.t._ZNK7Konsole14CharacterColor5colorEPKNS_10ColorEntryE' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o)
`.L185' referenced in section `.rodata' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o): defined in discarded section `.gnu.linkonce.t._ZNK7Konsole14CharacterColor5colorEPKNS_10ColorEntryE' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o)
`.L186' referenced in section `.rodata' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o): defined in discarded section `.gnu.linkonce.t._ZNK7Konsole14CharacterColor5colorEPKNS_10ColorEntryE' of ../libqtermwidget_d.a(TerminalCharacterDecoder.o)

Автор: un-defined 9.7.2008, 12:14

Да, это под *nix
Лучше брать не файловый релиз, а из CVS - там посвежее, почище должно быть.


Насчет debugовой версии ничего сказать не могу, не было такого:)

Автор: Гость 9.7.2008, 12:19

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

Автор: ViGOur 9.7.2008, 12:53

Добавил: http://www.crossplatform.ru/?q=node/566

Автор: void* 9.7.2008, 14:17

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

Автор: un-defined 9.7.2008, 14:42

Цитата(Гость @ 9.7.2008, 13:19) *
исходный код испагенный комментариями


Отличная фраза, шедевр настоящий :)

Автор: void* 15.7.2008, 10:05

немного покопался в коде. Действительно обильные комментарии затрудняют чтение кода, да и стиль программирования местами не очень понравился: постоянные приведения в стиле Си, использование void* (что весьма нежелательно, да и по-моему не аргументированно). Ну а так, в принципе неплохо, но еще очень огорчило отсутствие полосы прокрутки

Автор: un-defined 15.7.2008, 10:45

Цитата(void* @ 15.7.2008, 11:05) *
немного покопался в коде. Действительно обильные комментарии затрудняют чтение кода, да и стиль программирования местами не очень понравился: постоянные приведения в стиле Си, использование void* (что весьма нежелательно, да и по-моему не аргументированно). Ну а так, в принципе неплохо, но еще очень огорчило отсутствие полосы прокрутки



За исходный стиль винить разработчиков konsole в KDE4 :) Мне надо было для начала добиться работоспособности, а рефакторингом займусь потом, если время будет.
Если есть предложения по улучшению - патчи принимаются.

Комментарии мне лично не мешают.

Полоса прокрутки отключена сознательно - мне так внешний вид больше нравится. Ctrl+PgUP,PgDn еще никто не отменял, а размером history можно управлять. В принципе никто не мешает включить, ну или опцию добавить.. может и сделаю, если уж прямо очень убедительно надо (хотя я, опять повторю, такой необходимости не вижу)

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

Автор: void* 15.7.2008, 11:15

Цитата(un-defined @ 15.7.2008, 10:45) *
В принципе никто не мешает включить, ну или опцию добавить.. может и сделаю, если уж прямо очень убедительно надо

было бы очень даже неплохо :)

Автор: un-defined 15.7.2008, 23:59

Цитата(void* @ 15.7.2008, 12:15) *
было бы очень даже неплохо :)


Да не вопрос:)
В cvs забирать.


Кстати, по поводу использования void* - что именно там непонятно и нежелательно?

Автор: void* 16.7.2008, 9:32

теперь другое дело :) правда теперь почему-то стал слишком большой шрифт и отступ от текущего пути, вот http://img503.imageshack.us/img503/7180/termwidgetap8.png :)

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

void *_session;
void *_terminalDisplay;


примеры:
((TerminalDisplay*)_terminalDisplay)->setSize(80, 40);

((Session*)_session)->addView((TerminalDisplay*)_terminalDisplay);

Автор: un-defined 16.7.2008, 9:55

Цитата(void* @ 16.7.2008, 10:32) *
теперь другое дело :) правда теперь почему-то стал слишком большой шрифт и отступ от текущего пути, вот http://img503.imageshack.us/img503/7180/termwidgetap8.png :)

Шрифт моноширинный должен быть.
По умолчанию стоит Monospace, 10.
Я ставил еще terminus, 12
С другими шрифтами могут быть как раз такие проблемы, так как положение курсора вычисляется как (размер символа) Х (количество символов). А в немоноширинных шрифтах размер символа непостоянен..

Но вообще я в этот раз не трогал ту часть, которая за шрифты отвечает:)

Цитата(void* @ 16.7.2008, 10:32) *
насчет void* - лично я не совсем понимаю зачем в классе держать указатели на void и при каждом их использовании приводить их к нужному типу:
void *_session;
void *_terminalDisplay;


потому что надо было спрятать внутренние типы от приложений, которые будут этот класс использовать. Понятно, что тут явно просятся forward declarations и pimpl, но я решил вообще убрать из интерфейсного класса какие-либо упоминания о внутренних классах.
Может быть как-нибудь переделаю на досуге:)

Автор: void* 16.7.2008, 10:02

Цитата(un-defined @ 16.7.2008, 9:55) *
Шрифт моноширинный должен быть.
По умолчанию стоит Monospace, 10.
Я ставил еще terminus, 12
С другими шрифтами могут быть как раз такие проблемы, так как положение курсора вычисляется как (размер символа) Х (количество символов). А в немоноширинных шрифтах размер символа непостоянен..

в принципе да, с Monospace все вроде нормально

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

Автор: Litkevich Yuriy 16.7.2008, 13:07

Цитата(void* @ 16.7.2008, 14:02) *
вместо обоих полос прокрутки враппер

это плохая идея, должна быть прокрутка

Автор: un-defined 16.7.2008, 13:14

А зачем нужна горизонтальная прокрутка?

Автор: Litkevich Yuriy 16.7.2008, 13:23

строки могут быть длинные, а перенос не информативен, т.к. нарушает реальный вывод, пример, сборка Qt.

Автор: Lenymo 27.8.2010, 20:10

Подскажите, пожалуйста, а можно ли на основе этого эмулятора сделать виджет реального терминала?

Автор: un-defined 27.8.2010, 20:28

Цитата(Lenymo @ 27.8.2010, 21:10) *
Подскажите, пожалуйста, а можно ли на основе этого эмулятора сделать виджет реального терминала?


А что вы понимаете под реальным терминалом?

Автор: Lenymo 29.8.2010, 16:13

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

Автор: kwisp 29.8.2010, 17:03

Lenymo,
ну к примеру в терминале всегда можно набрать ssh имя_позбзователя@имя_машины - вот в принципе даже без переделки в каком то виде есть такая возможность.

Автор: Lenymo 29.8.2010, 19:15

kwisp, мне нужен serial terminal...

Автор: kuzulis 30.8.2010, 8:21

Цитата
kwisp, мне нужен serial terminal...

ssh может быть over serial.

Lenymo, нет в природе такого виджета как вы хотите. Есть отдельно библиотеки/классы для GUI, есть для работы с портом, есть кое что на qt-apps.org, часть кода можно стыбрить из KDE, т.е. везде всего понемножку, поэтому делайте сами.

Автор: Lenymo 30.8.2010, 19:32

kuzulis, так я и собираюсь сама, просто надеялась сэкономить время и не изобретать велосипед ;) То есть использовать часть классов этого эмулятора для моей задачи - отображения удаленной консоли. Собственно, работа с портом у меня уже есть, надо только визуализацию прикрутить...

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)