使用 'cmd' 命令的 QProcess 不会导致命令行 window
QProcess with 'cmd' command does not result in command-line window
我正在将代码从 MinGW 移植到 MSVC2013/MSVC2015 并发现了一个问题。
QProcess process;
QString program = "cmd.exe";
QStringList arguments = QStringList() << "/K" << "python.exe";
process.startDetached(program, arguments);
当我使用 MinGW 时,此代码生成命令行 window。但是当我使用 MSVC2013 或 MSVC2015 时,相同的代码会导致 cmd-process 运行 在后台没有任何 windows。有什么方法可以使命令行 window 出现吗?
问题与msvc2015有关,与Qt5.8.0无关。有办法逃避它。这个想法是使用 CREATE_NEW_CONSOLE 标志。
#include <QProcess>
#include <QString>
#include <QStringList>
#include "Windows.h"
class QDetachableProcess
: public QProcess {
public:
QDetachableProcess(QObject *parent = 0)
: QProcess(parent) {
}
void detach() {
waitForStarted();
setProcessState(QProcess::NotRunning);
}
};
int main(int argc, char *argv[]) {
QDetachableProcess process;
QString program = "cmd.exe";
QStringList arguments = QStringList() << "/K" << "python.exe";
process.setCreateProcessArgumentsModifier(
[](QProcess::CreateProcessArguments *args) {
args->flags |= CREATE_NEW_CONSOLE;
args->startupInfo->dwFlags &=~ STARTF_USESTDHANDLES;
});
process.start(program, arguments);
process.detach();
return 0;
}
您不需要为此使用 QProcess
。只使用 std::system
:
就简单多了
#include <cstdlib>
// then when you want to open a
// detached command prompt:
std::system("cmd");
您还可以执行以下操作:
std::system("cd some/path && cmd");
它是标准的 C++(来自 C),因此 std::system(...)
本身可以在任何平台上运行,您唯一需要为每个平台设置的是 shell 命令。
我正在将代码从 MinGW 移植到 MSVC2013/MSVC2015 并发现了一个问题。
QProcess process;
QString program = "cmd.exe";
QStringList arguments = QStringList() << "/K" << "python.exe";
process.startDetached(program, arguments);
当我使用 MinGW 时,此代码生成命令行 window。但是当我使用 MSVC2013 或 MSVC2015 时,相同的代码会导致 cmd-process 运行 在后台没有任何 windows。有什么方法可以使命令行 window 出现吗?
问题与msvc2015有关,与Qt5.8.0无关。有办法逃避它。这个想法是使用 CREATE_NEW_CONSOLE 标志。
#include <QProcess>
#include <QString>
#include <QStringList>
#include "Windows.h"
class QDetachableProcess
: public QProcess {
public:
QDetachableProcess(QObject *parent = 0)
: QProcess(parent) {
}
void detach() {
waitForStarted();
setProcessState(QProcess::NotRunning);
}
};
int main(int argc, char *argv[]) {
QDetachableProcess process;
QString program = "cmd.exe";
QStringList arguments = QStringList() << "/K" << "python.exe";
process.setCreateProcessArgumentsModifier(
[](QProcess::CreateProcessArguments *args) {
args->flags |= CREATE_NEW_CONSOLE;
args->startupInfo->dwFlags &=~ STARTF_USESTDHANDLES;
});
process.start(program, arguments);
process.detach();
return 0;
}
您不需要为此使用 QProcess
。只使用 std::system
:
#include <cstdlib>
// then when you want to open a
// detached command prompt:
std::system("cmd");
您还可以执行以下操作:
std::system("cd some/path && cmd");
它是标准的 C++(来自 C),因此 std::system(...)
本身可以在任何平台上运行,您唯一需要为每个平台设置的是 shell 命令。