Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Программирование на Qt: Не работающий QProcess  (Прочитано 2539 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nikki1993

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3261
  • Owner of Dell XPS 13 Developer Edition :D
    • Просмотр профиля
Всем привет. Тапками прошу сразу не кидать, только учусь программировать на Qt.  ;) Но столкнулся с проблемой. Я хочу открыть терминал в Ubuntu через свою программу и выполнить команду uname -r и соотвественно прочитать выхлоп и сохранить в QString. Но вот проблема. Процесс терминала стартует и завершается нормально, а вот выполнить команду и/или прочитать выхлоп я не могу. Вот код программы
Код: (C++) [Выделить]
QString getKernelVersion () {

    QProcess sh;
    QString kernelVersion = "";
    QStringList arguments;

    arguments << "-e";

    sh.start("xterm -e");

    sh.waitForFinished();

    sh.write("uname -r");

    qDebug() << sh.readAllStandardOutput();

    kernelVersion = sh.readAllStandardOutput();

    sh.close();

    return kernelVersion;
}

Ну собственно вопрос, что мне сделать чтобы прочитать выхлоп терминала через программу в Qt? Всем спасибо
First i was like :0 Then i was like :D But now i am like(╯°□°)╯︵ ┻━┻
http://www.abload.de/img/banner_505uxa.png

Оффлайн Кровавый

  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
У меня так и не получилось решить эту проблему, но QProcess - асинхронный класс. То есть, вы вызываете чтение до того, как результат готов. Тут 2 пути:
1. Использовать сигналы void QProcess::readyReadStandardError() и [/size]void QProcess::readyReadStandardOutput();
2. Запускать синхронно, то есть добавить:
Код: (cpp) [Выделить]
sh.waitForReadyRead();
Пользователь решил продолжить мысль 20 Июля 2013, 15:16:53:
http://qt-project.org/doc/qt-5.0/qtcore/qprocess.html#synchronous-process-api - тут подробней. :)
« Последнее редактирование: 20 Июля 2013, 15:16:53 от Кровавый »
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
У меня так и не получилось решить эту проблему, но QProcess - асинхронный класс. То есть, вы вызываете чтение до того, как результат готов. Тут 2 пути:
1. Использовать сигналы void QProcess::readyReadStandardError() и [/size]void QProcess::readyReadStandardOutput();
2. Запускать синхронно, то есть добавить:
Код: (cpp) [Выделить]
sh.waitForReadyRead();
Пользователь решил продолжить мысль 20 Июля 2013, 15:16:53:
http://qt-project.org/doc/qt-5.0/qtcore/qprocess.html#synchronous-process-api - тут подробней. :)
для синхронного использования лучше в отдельный поток помещять, а вообще правильнее будет использовать сигналы слоты....
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

 

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