我在Qt中创建了两个程序。
程序A - 在shell中进行交互的控制台项目
程序B - GUI项目
现在我想从程序B启动程序A.为此,我尝试了很多东西并以:
结束QProcess *process = new QProcess(this);
QString command = "cmd.exe";
QStringList arguments;
arguments << "/C" << settings.getPath().replace("/","\\");
process->start(command, arguments);
这会启动一个进程,但不会在Windows中打开cmd。
我也试过了:
QProcess *process = new QProcess(this);
QString command = "start";
QStringList arguments;
arguments << "cmd.exe" << "/C" << settings.getPath().replace("/","\\");
process->start(command, arguments);
看起来该过程是在后台启动的。在这种情况下,我无法使用我的命令行程序。
如何启动交互式cmd?
答案 0 :(得分:1)
您为每个项目使用哪种devenv?
根据您使用的开发环境,您可以尝试将控制台项目设置为在不在后台的cmd.exe中运行(您需要查看dev-env中的手册)情况下)
其他事情: 你能通过
启动你的(编译好的)控制台项目吗? system("projecta.exe");
?
来自项目b?
如果您使用的是Visual Studio编译器,请查看以下内容:QProcess with 'cmd' command does not result in command-line window
使用以下代码(请注意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;
}