gpt4 book ai didi

c++ - 在 qt widgets 应用程序中显示 cmd 终端

转载 作者:行者123 更新时间:2023-11-30 05:03:28 26 4
gpt4 key购买 nike

我正在尝试使用 system() 传递一些 cmd 命令,我希望能够与 cmd 进行“通信”,比如我在主窗口中的 system("dir") 中编写代码.cpp 在我点击的函数下

这就是它的样子

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 旁边弹出,然后当我在我的 GUI 中输入“dir”并按回车键时,一个 cmd 窗口会非常快速地弹出,不到一秒钟,它走了。我什至用 system("ipconfig")system ("pause") 试过了以及像这样的一个系统命令 system("ipconfig""&pause")

期望的结果: 只是正常执行 system("ipconfig"),然后执行其他系统命令,显示与在 cmd 本身中键入它们相同的结果。

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

还有其他更好的方法可以实现我想要的吗?我真的是菜鸟,非常感谢一些指导。

最佳答案

你可以试试

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

关于c++ - 在 qt widgets 应用程序中显示 cmd 终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com