Qt在交互式shell中启动进程

时间:2018-01-30 09:50:52

标签: c++ qt cmd

我在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?

1 个答案:

答案 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;
}