我尝试使用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。
还有另一种更好的方法可以实现我的目标吗? 我真的是一个菜鸟,非常感谢一些指导。
答案 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以更深入地控制您的流程,以便您可以读/写子流程管道。