Russian Qt Forum
Май 07, 2024, 01:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess и ping  (Прочитано 4070 раз)
rust3128
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« : Октябрь 23, 2017, 11:25 »

Возникла необходимость отображать в форме вывод команды пинг.
Код:
void InfoObjectDialog::on_toolButtonPing_clicked()
{    if(ui->pingOutput->isHidden()) {
        ping = new QProcess(this);
        ping->setProcessChannelMode(QProcess::MergedChannels);
        connect( ping, SIGNAL(readyReadStandardOutput ()), this, SLOT(print_ping()) );
#ifdef Q_OS_WIN
     ping->start("ping", QStringList() << "-t" <<ip);
#else
     ping->start("ping", QStringList() << ip);
#endif
    } else {
        ping->kill();
    }
}
void InfoObjectDialog::print_ping()
{
    QByteArray      output;
    output = ping->readAllStandardOutput ();
    QTextCodec *codec = QTextCodec::codecForName("cp-866");
    QString fio = codec->toUnicode(output.data());
    fio.replace("\n","");
    qDebug() << "ping output" << fio;
    ui->pingOutput->appendPlainText(fio); //вывод в гуи
}
ping->kill(); Это понятно убивает процесс.
А хотелось бы послать  Ctrl+C. дабы получить статистику работы ping.
Может я не там Асистент читаю? :-)
« Последнее редактирование: Октябрь 23, 2017, 19:33 от rust3128 » Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Октябрь 23, 2017, 12:55 »

QProcess::execute(QString("kill -SIGINT %1").arg(ping->pid()));
« Последнее редактирование: Октябрь 23, 2017, 12:57 от qate » Записан
rust3128
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #2 : Октябрь 23, 2017, 13:29 »

Таки не там читал. Спасибо.
Записан
rust3128
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #3 : Октябрь 23, 2017, 20:07 »

В Linux все работает. В Windows при сборке

Код:
E:\Develop\HotlineDesktop\infoobjectdialog.cpp:261: ошибка: no matching function for call to 'arg(Q_PID)'
         QProcess::execute(QString("kill -SIGINT %1").arg(ping->pid()));
Завершаю так.
Код:
PROCESS_INFORMATION *pinfo = (PROCESS_INFORMATION  *)ping->pid();
QProcess::execute(QString("taskkill /PID %1 /F").arg(pinfo->dwProcessId));
Однако статистики PING не получаю :-(
« Последнее редактирование: Октябрь 23, 2017, 21:08 от rust3128 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 22.