Вывод текста из терминала в виджет (Qt)
Модератор: Модераторы разделов
Вывод текста из терминала в виджет
Привет всем.
Для практики и навыка,решил написать GUI к команде ping средствами с++.Ввод команды и ее аргуметов,осуществляю с помощью класса QProcess. Теперь, поставлена задача,показывать вывод команды, в виджете Qt , например, в QTextEdit в режиме ReadOnly.
Вопрос -- как сделать, чтобы информация выведенная в терминале перенаправлялась в виджет?
Если не трудно,приведите примеры такого кода.
Спасибо. : )
PS пока что я только учусь,так что не пинайте сильно. =)
Для практики и навыка,решил написать GUI к команде ping средствами с++.Ввод команды и ее аргуметов,осуществляю с помощью класса QProcess. Теперь, поставлена задача,показывать вывод команды, в виджете Qt , например, в QTextEdit в режиме ReadOnly.
Вопрос -- как сделать, чтобы информация выведенная в терминале перенаправлялась в виджет?
Если не трудно,приведите примеры такого кода.
Спасибо. : )
PS пока что я только учусь,так что не пинайте сильно. =)
Gentoo 2006.0
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
Re: Вывод текста из терминала в виджет
Qt знаю пока довольно посредственно, можно перенаправить вывод пинга во временный файл и с него считать информацию... А вообще, rtfm по I/O.
- aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Вывод текста из терминала в виджет
Может, popen?
Re: Вывод текста из терминала в виджет
хоть это и классика, но в Qt вроде свой способ есть
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
- aLexx programmer
- Сообщения: 985
- Статус: Турук-Макто
- ОС: Gentoo -> Ubuntu
Re: Вывод текста из терминала в виджет
(ety @ Sep 30 2006, в 20:55) писал(а):хоть это и классика, но в Qt вроде свой способ есть
А я люблю классику
Тем более, что в QT этот способ будет, скорее всего, обёрткой над этим самым popen.
Re: Вывод текста из терминала в виджет
Вот,пробовал применять метод: (класс QProcess)
Но он не дает полного вывода ,а выводит только ошибки и ворнинги...
Киньте пожалуйста если не трудно примеры кода....
Код: Выделить всё
void mPing::updateOutputTextEdit()
{
QByteArray data = process->readStderr();
QByteArray data2 = process->readStdout();
QString text = QString(data);
QString text2 = QString (data2);
textEdit1->setText(text, text2);
}
Но он не дает полного вывода ,а выводит только ошибки и ворнинги...
Киньте пожалуйста если не трудно примеры кода....
Gentoo 2006.0
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
Re: Вывод текста из терминала в виджет
Ипона мать
Обратите внимание на сигналы
void readyReadStdout ()
void readyReadStderr ()
пишем два слота и усе(теоритически) хотя сам не пробовал
ну или пример из assistant
UicManager::UicManager()
{
proc = new QProcess( this );
proc->addArgument( "uic" );
proc->addArgument( "-tr" );
proc->addArgument( "i18n" );
proc->addArgument( "small_dialog.ui" );
connect( proc, SIGNAL(readyReadStdout()),
this, SLOT(readFromStdout()) );
if ( !proc->start() ) {
// error handling
}
}
void UicManager::readFromStdout()
{
// Read and process the data.
// Bear in mind that the data might be output in chunks.
}
Обратите внимание на сигналы
void readyReadStdout ()
void readyReadStderr ()
пишем два слота и усе(теоритически) хотя сам не пробовал
ну или пример из assistant
UicManager::UicManager()
{
proc = new QProcess( this );
proc->addArgument( "uic" );
proc->addArgument( "-tr" );
proc->addArgument( "i18n" );
proc->addArgument( "small_dialog.ui" );
connect( proc, SIGNAL(readyReadStdout()),
this, SLOT(readFromStdout()) );
if ( !proc->start() ) {
// error handling
}
}
void UicManager::readFromStdout()
{
// Read and process the data.
// Bear in mind that the data might be output in chunks.
}
Linux user #432536.
Re: Вывод текста из терминала в виджет
Заработало : ))) И впрямь дело в этом было...
Gentoo 2006.0
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
Re: Вывод текста из терминала в виджет
Фирма веников не вяжет java script:emoticon(':blink:', 'smid_7')
ЗЫ: Кинь исходник
ЗЫЗЫ: Как погода в питере?
Linux user #432536.
Re: Вывод текста из терминала в виджет
Вот исходник...
2TwisT
Погода пасмурная и дождливая
2TwisT
Погода пасмурная и дождливая
Gentoo 2006.0
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
"Когда я вижу что-либо смешное , я весь просто трясусь от смеха. Поэтому всегда хожу небритый.")))
Re: Вывод текста из терминала в виджет
Программма безусловно полезная.
Вот тока в винде каракули на выходе вместо ВЕЛИКОГО РУССКОГО языка
Мож кто граммотный знает как исправить?
Вот тока в винде каракули на выходе вместо ВЕЛИКОГО РУССКОГО языка
Мож кто граммотный знает как исправить?
Linux user #432536.
Re: Вывод текста из терминала в виджет
Не поверите, не работает.
Я тута думаю что дело в формате читаемом из stdout && stderror
Я тута думаю что дело в формате читаемом из stdout && stderror
Linux user #432536.
- eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
- Контактная информация:
Re: Вывод текста из терминала в виджет
Может так:
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString outputstring = codec->toUnicode(inputstring);
?
В дисгармонии со вселенной.