QProcess::readAllStandardOutput() 截断结果

QProcess::readAllStandardOutput() truncates result

本文关键字:结果 readAllStandardOutput QProcess      更新时间:2023-10-16

我的Qt程序需要发送带有QProcess的命令行并检索结果,然后将结果存储在QString中。

这是我的代码:

主窗口.h

class MainWindow : public QMainWindow
{
  Q_OBJECT
private:
  QProcess p;
  void sendCommand(QString command);
private slot:
  void fetchResult();
  // ...
}

主窗口.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);(例如(,我希望在位于 fetchResult() 中的 result 变量中得到结果。

一切都像魅力一样工作,但是...如果结果太大(~700 个字符(,则将其截断。奇怪的事情:变量包含我期望的字符串的末尾

我在哪里错过了什么。

如果您想等到执行结束,请尝试以下操作:

  • 添加Slotprivate 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()) );

希望对您有所帮助。