在qt小部件应用程序中显示cmd终端

时间:2018-03-21 15:16:59

标签: c++ qt cmd console

我尝试使用system()传递一些cmd命令,我希望能够“#34;”沟通"使用cmd,假设我在我的mainwindow.cpp中的system("dir")中编码了我点击的函数

这就是它的样子

void MainWindow::on_pushButton_login_clicked()
{
  std::string platform_server_ip  = ui->lineEdit_platform_server_ip->text().toStdString();   

  if (platform_server_ip == "dir"

    {
      QMessageBox::information(this,"Login", "all required log in details are correct");

     close();

     const char* c = platform_server_ip.c_str();
     system(c);
     system("ipconfig");


    }

我想知道为什么它会像这样,如果那是正常的。我已经加CONFIG += console了 在我的项目文件中,并检查"在终端中运行" (尝试过也没有),但它从未向我显示我的期望的结果

相反,我得到的是一个空白终端,它在我的GUI旁边弹出,然后当我进入" dir"在我的GUI中点击回车,一个cmd窗口弹出非常快,在不到一秒的时间内就消失了。我甚至尝试过system("ipconfig")system ("pause") 以及一个像system("ipconfig" "&pause")

这样的系统命令

期望的结果:只是系统的正常执行(&#34; ipconfig&#34;),其次是其他系统命令,显示与在cmd中键入它们相同的结果。< / p>

我已经在&#34; qt控制台应用程序&#34;中尝试了所有这些。然后我得到相同的结果,或输出(通常作为cmd上的输出)然后在&#34;应用程序输出&#34;中找到。 qt creator。

还有另一种更好的方法可以实现我的目标吗? 我真的是一个菜鸟,非常感谢一些指导。

2 个答案:

答案 0 :(得分:1)

你可以尝试

system("cmd /k ipconfig");

这将打开另一个终端窗口,该窗口将在命令执行结束时保持打开状态(k代表keep)。

我认为您不需要CONFIG += console项目设置来实现此目的。调用system将启动另一个进程,该进程与调用应用程序完全无关。

如果要从Qt应用程序中启动外部程序,可以使用QProcess class,这样可以通过标准输入/输出以某种方式与已启动的进程进行交互。对于一个非常简单的示例,请使用带有按钮的表单和名为textEdit的文本编辑;在按钮clicked插槽中:

QProcess process;
process.start("ipconfig");
process.waitForReadyRead();
ui->textEdit->setText(process.readAll());
process.waitForFinished();

这样,您将看不到其他控制台窗口,命令输出将直接显示在文本编辑中。

这可以在这样的函数中推广:

bool exec(QString command)
{
  QProcess process;
  process.start(command);
  if(!process.waitForStarted())
  {
    return false; //the process failed to start
  }

  //etc...

  return true;
}

答案 1 :(得分:0)

根据这不仅仅是一个快速的黑客/工具,您可以查看QProcess以更深入地控制您的流程,以便您可以读/写子流程管道。