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

C++ 在qt小部件应用程序中显示cmd终端,c++,qt,cmd,console,C++,Qt,Cmd,Console,我正在尝试使用system()传递一些cmd命令,我希望能够与cmd“通信”,比如我在单击的函数下的mainwindow.cpp中的system(“dir”) 例如,这就是它的外观 void MainWindow::on_pushButton_login_clicked() { std::string platform_server_ip = ui->lineEdit_platform_server_ip->text().toStdString(); if (pla

我正在尝试使用system()传递一些cmd命令,我希望能够与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
在我的项目文件中,选中“run-in terminal”(也尝试了,但没有),但它从未向我显示我的所需结果

相反,我得到的是一个空白终端,它会在我的GUI旁边弹出,然后当我在GUI中输入“dir”并按enter键时,一个cmd窗口会很快弹出,不到一秒钟,它就消失了。我甚至用
system(“ipconfig”)
system(“pause”)
以及一个像这样的系统命令
system(“ipconfig”“&pause”)

期望的结果:只是系统(“ipconfig”)的正常执行,然后是其他系统命令,这些命令显示的结果与在cmd中键入命令相同

我也在“qt控制台应用程序”中尝试了所有这些,或者得到了相同的结果,或者在qt creator的“应用程序输出”中找到了输出(通常作为cmd上的输出)

有没有其他更好的方法可以实现我想要的? 我真的是个书呆子,非常感谢你的指导。

你可以试试

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

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

如果您想从Qt应用程序中启动外部程序,可以使用,它允许您通过标准的输入/输出与启动的进程进行交互。对于一个非常简单的例子,有一个带有按钮和文本编辑的表单,称为
textdedit
;在按钮
中单击
插槽:

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

取决于这是否仅仅是一个快速破解/工具,您可以查看QProcess以更深入地控制您的流程,从而可以读取/写入子流程管道。

非常感谢。。然而。。它今天才起作用。。没有任何改变,我的代码工作了。。我唯一不同的做法是(这听起来很可笑)我点击了“run”而不是f5…我真的不知道发生了什么事。他们,我一直在尝试你提供给我的代码(我认为它比我现在的代码好上千倍!!),我有一个问题,我有没有办法也输入东西?通过行编辑?例如,输入“dir”之类的内容,并将其显示在我的文本编辑字段中?非常感谢@是的,你可以。我在答案中添加了一个通用函数来演示如何操作。谢谢您的编辑!!但是,当我想将参数传递给批处理脚本时,该怎么办?(在我的qprocess命令中)例如,我想将QLine编辑输入的用户名和密码传递到此qprocess中