我正在尝试做一个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/