QProcess :: readAllStandardOutput () обрезает результат - PullRequest
0 голосов
/ 06 июня 2019

Моей программе Qt нужно отправить командную строку с QProcess и получить результат, который затем будет сохранен в QString.

Вот мой код:

mainwindow.h

class MainWindow : public QMainWindow
{
  Q_OBJECT

private:
  QProcess p;

  void sendCommand(QString command);

private slot:
  void fetchResult();

  // ...
}

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  connect(&p, SIGNAL(readyReadStandardOutput()), this, SLOT(fetchResult()));

  // ... 
}

void MainWindow::fetchResult()
{
  QString result = p.readAllStandardOutput();

  // ...
}

void MainWindow::sendCommand(QString command)
{
  p.start(command);
  p.waitForFinished();
}

// ...

Затем я отправляю такие команды: sendCommand("cat " + filename); (например) и ожидаю получить результат в переменной result, расположенной в fetchResult().

Все работает как обаяние, но ... если результат слишком велик (~ 700 символов), его мучают. Странная вещь: переменная содержит конец ожидаемой строки.

Где я что-то пропускаю.

1 Ответ

0 голосов
/ 06 июня 2019

Поскольку вы хотите дождаться окончания выполнения, попробуйте это, у меня это работает:

  • добавьте Slot как private slots: void cmdFinished();, чтобы получить QProcess::finished сигнал:
void MainWindow::cmdFinished()
{
    // process Standard Output result
    fetchResult();

    // process Standard Error result
    //fetchErrResult(); // add it if you want to process Errors (p.readAllStandardError())
}
  • подключить только QProcess::finished(int) (удалить подключение к сигналу readyReadStandardOutput()):
connect( &p, SIGNAL(finished(int)),
         this, SLOT(cmdFinished()) );

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...