Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Эмулятор терминала на qt4
Форум на CrossPlatform.RU > Административный > Crossplatform.ru - все о нем > Обсуждение исходников с сайта
un-defined
Есть проект виджета эмулятора терминала, написанный на qt4. Но некроссплатформенный, потому как использует системные вещи. Это будет интересно кому-нибудь?
Может кто-нибудь сможет его под mingw собрать? я не могу, за неимением windows, так что просто не в курсе, как там что в mingw устроено.

Если что - ссылка вот:
http://sourceforge.net/projects/qtermwidget
ViGOur
А поподробней описание?

Просто с нынешним описанием не понятно, в чем его вкусность! :)
un-defined
Вкусность в том, что его можно встраивать в свои приложения именно как обычный виджет qt. При этом он никак не зависит от KDE, хотя и сделан на основе konsole. Ну и поддержка unicode вроде бы тоже имеется.
void*
очень интересная вещица, надо будет взглянуть :)
насколько я понял это под *nix?
Гость
Неплохо.
Собралось и заработало с 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
Да, это под *nix
Лучше брать не файловый релиз, а из CVS - там посвежее, почище должно быть.


Насчет debugовой версии ничего сказать не могу, не было такого:)
Гость
Единственное что бесит - исходный код испагенный комментариями (походу на их генерацию и набор у автором ушло времени больше чем на создание самого виджета), читать очень трудно.
ViGOur
Добавил: QTermWidget - Эмулятор терминала
void*
возможно буду использовать в своей программе этот виджет, чуть позже покопаюсь поподробнее
un-defined
Цитата(Гость @ 9.7.2008, 13:19) *
исходный код испагенный комментариями


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



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

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

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

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

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


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


Кстати, по поводу использования void* - что именно там непонятно и нежелательно?
void*
теперь другое дело :) правда теперь почему-то стал слишком большой шрифт и отступ от текущего пути, вот скрин :)

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


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

((Session*)_session)->addView((TerminalDisplay*)_terminalDisplay);
un-defined
Цитата(void* @ 16.7.2008, 10:32) *
теперь другое дело :) правда теперь почему-то стал слишком большой шрифт и отступ от текущего пути, вот скрин :)

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

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

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


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

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

ЗЫ я конечно наверно уже совсем обнаглел, но может сделаешь еще и горизонтальную полосу прокрутки или вместо обоих полос прокрутки враппер из QAbstractScrollArea? :)
Litkevich Yuriy
Цитата(void* @ 16.7.2008, 14:02) *
вместо обоих полос прокрутки враппер

это плохая идея, должна быть прокрутка
un-defined
А зачем нужна горизонтальная прокрутка?
Litkevich Yuriy
строки могут быть длинные, а перенос не информативен, т.к. нарушает реальный вывод, пример, сборка Qt.
Lenymo
Подскажите, пожалуйста, а можно ли на основе этого эмулятора сделать виджет реального терминала?
un-defined
Цитата(Lenymo @ 27.8.2010, 21:10) *
Подскажите, пожалуйста, а можно ли на основе этого эмулятора сделать виджет реального терминала?


А что вы понимаете под реальным терминалом?
Lenymo
В общем, мне нужен виджет типа PuTTY для работы через реальный последовательный порт - чтобы он обеспечивал управление удаленным узлом и отображение, в то время как сама работа выполнялась бы на другой стороне.
kwisp
Lenymo,
ну к примеру в терминале всегда можно набрать ssh имя_позбзователя@имя_машины - вот в принципе даже без переделки в каком то виде есть такая возможность.
Lenymo
kwisp, мне нужен serial terminal...
kuzulis
Цитата
kwisp, мне нужен serial terminal...

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

Lenymo, нет в природе такого виджета как вы хотите. Есть отдельно библиотеки/классы для GUI, есть для работы с портом, есть кое что на qt-apps.org, часть кода можно стыбрить из KDE, т.е. везде всего понемножку, поэтому делайте сами.
Lenymo
kuzulis, так я и собираюсь сама, просто надеялась сэкономить время и не изобретать велосипед ;) То есть использовать часть классов этого эмулятора для моей задачи - отображения удаленной консоли. Собственно, работа с портом у меня уже есть, надо только визуализацию прикрутить...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2022 IPS, Inc.