QProcess :: readAllStandardOutput()截断结果

时间:2019-06-06 13:42:30

标签: c++ qt

我的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个字符),则会被截断。奇怪的是:变量包含我期望的字符串的 end

我在哪里想念东西。

1 个答案:

答案 0 :(得分:0)

要等到执行结束,请尝试以下操作,它对我有用:

  • id一样添加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()

希望它对您有帮助。