Qt Windows应用程序打开控制台输出

时间:2014-05-24 14:21:39

标签: c++ qt shell qtgui qtcore

我有一个Windows应用程序,我想从控制台/命令行运行一些ant脚本。我想要做的是点击我的执行按钮并打开一个控制台/ shell窗口并在windows,unix,mac上运行命令并在完成后退出。这样我就可以看到所有输出。我一直在使用QProcess来做它并且它有效。但我真的想每次运行脚本时打开一个控制台窗口。他们可以用它来做这个API吗?

更新

这是我的代码:

QString argument = QString("ant -f %1 %2 %3\n\r").arg(QDir::cleanPath(file), parameter, target);
QProcess scriptProcess;
scriptProcess.setProcessChannelMode(QProcess::MergedChannels);

if (Commons::GetCurrentOSID() == 1) // Windows
    scriptProcess.start(QString("cmd"));
else if (Commons::GetCurrentOSID() == 2) // Mac
    scriptProcess.start(QString("bash"));
else if (Commons::GetCurrentOSID() == 3)
    scriptProcess.start(QString("bash")); // Windows

if (!scriptProcess.waitForStarted())
{
    message.append("Ant command failed to execute");
}
else
{
    scriptProcess.write(argument.toStdString().c_str());
    scriptProcess.write("exit\n\r");

    result = scriptProcess.waitForFinished();
    if (result == false)
    {
        message.append("Ant command failed to complete");
    }
    else
        result = true;
}

scriptProcess.closeWriteChannel();
QByteArray output = scriptProcess.readAll();
text->setPlainText(output);

注意: 确保您在环境中设置了ant,java等设置。

1 个答案:

答案 0 :(得分:0)

这是我个人使用的代码:

QProcess scriptProcess;
scriptProcess.setProcessChannelMode(QProcess::MergedChannels);
scriptProcess.start("ant", QStringList{"-f", "build.xml", "-Dproject=something"});
if (!scriptProcess.waitForStarted())
    return false;

if (!scriptProcess.waitForFinished())
    return false;

QByteArray output = scriptProcess.readAll();
myLabel.setText(output);

确保正确使用shebang等,否则,您可能需要明确指定解释器。