我正在尝试做一个Qt小部件应用程序,并且我有一个批处理文件:

@echo off

echo Hello Everyone!
echo ----------------
echo 1 - Exit Program
echo ----------------
echo 2 - Say Hi 5 times
echo ----------------
set /p QUESTION=What would you like to do today?:
echo:
IF %QUESTION%==1 GOTO :1
IF %QUESTION%==2 GOTO :2

:1
exit
:2
cls
echo HI
echo HI
echo HI
echo HI
echo HI

pause


并且我想在使用QProcess启动时将“ 2”作为参数传递给它,例如与执行同步

这是我的mainwindow.cpp文件

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);

  auto proc = new QProcess();
  QString program = QString("\"%1%2\"").arg("C:/Users/firstname secondname/desktop/").arg("mybatchfile.bat");
  QStringList arguments;
      arguments << "2";

  proc->setWorkingDirectory("C:/Users/firstname secondname/desktop/");
  proc->start( program, arguments );
}

MainWindow::~MainWindow()
{
  delete ui;
}


我所期望的是它将运行我的批处理并向我显示5次喜
但是我得到的是什么,我没有任何错误,但是没有得到想要的输出

有人可以告诉我为什么吗,我该如何解决?我真的是菜鸟,任何意见回馈都会有帮助

最佳答案

如果要启动诸如notepad.exe之类的程序,则应使用proc->waitForFinished();等待命令终止,否则您的MainWindow将在启动它后立即关闭QProcess。

优良作法也将是实施错误捕获功能,例如readyReadStandardError()

无法直接启动批处理文件,因为它不是可执行文件。
它需要通过cmd.exe启动

cmd.exe有点棘手:可以在有或没有控制台的情况下启动cmd.exe,并且由于您的主窗口已经具有ui,因此启动的任何从属cmd.exe将没有控制台窗口。

因此,您必须使用proc->startDetached();作为独立进程启动cmd.exe。

因此,完整的东西必须看起来像这样:

QProcess* proc = new QProcess();
QString program = "cmd.exe";
QStringList arguments;
arguments << "/c C:/Users/firstname secondname/desktop/mybatchfile.bat 2";

proc->startDetached( program, arguments );
delete proc;


使用简化的批处理以确保获得输出:

 @echo %1%
 pause

关于c++ - 使用qprocess将参数传递给批处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51708177/

10-14 09:25