如何调用需要QtGui输入stdin的应用程序?

如何调用需要QtGui输入stdin的应用程序?,qt,executable,qprocess,Qt,Executable,Qprocess,我正在使用Ubuntu和QtCreator4 我有一个可执行形式的.cpp程序(比如说abc.out),我希望在按下按钮时运行该程序。它包含许多cin和cout,所以我希望它在“终端”(Ubuntu)上运行,这样我就能够向它输入和输出值。我该怎么做 我试过system()和 也, qprocessp1; p1.启动(./abc.输出) 使用QProcess,我的可执行文件会运行,但会在第一个cout处停止。它在Qt Creator的应用程序输出屏幕上运行,而不是在终端上运行 例如: 我在应用程序

我正在使用Ubuntu和QtCreator4

我有一个可执行形式的.cpp程序(比如说
abc.out
),我希望在按下按钮时运行该程序。它包含许多cin和cout,所以我希望它在“终端”(Ubuntu)上运行,这样我就能够向它输入和输出值。我该怎么做

我试过system()和 也, qprocessp1; p1.启动(./abc.输出)

使用QProcess,我的可执行文件会运行,但会在第一个cout处停止。它在Qt Creator的应用程序输出屏幕上运行,而不是在终端上运行

例如: 我在应用程序输出上看到:

输入名称:

当我在这里键入值并按enter键时,它不接受该值,而是移动到下一行,允许我进一步键入。
我想在终端上运行这个
abc.out
文件。任何想法都会非常有用。

你是说Qt Creator 2.4吗?在任何情况下,您都应该在“项目”选项卡上找到“运行设置”部分,并从中找到“在终端中运行”复选框。您还可以使用自定义的可执行文件选项并在那里键入:
gnome terminal--command./abc.out
确切的细节可能会有所不同,因为我使用的是Qt Creator 2.5

这在从Qt Creator启动时应该可以工作,但当您在IDE之外使用应用程序时,您需要从终端启动它,而不是双击可执行文件。要解决这个问题,我可以想出两种方法:

  • 从QtGui启动一个终端窗口(类似于
    QProcess::execute(“gnome terminal--command./abc.out”);
    ),尽管问题是不同的系统具有不同的终端名称
  • 作为GUI的一部分,您自己提供一个Qt输入/文本框,然后将用户输入转发到可执行文件(类似于
    myqprocess.write(输入由\u QtGui从\u user\u请求);
    )。在这里,您可能需要知道事先向用户询问哪些信息。如果要显示已启动进程的cout输出,可以使用
    read
    方法和QProcess之友

  • 根据您的问题,我假设您正在编写一个应用程序,该应用程序使用QProcess启动其他应用程序。这很好,但是如果您的子流程正在等待来自标准输入的数据,那么它将永远等待,因为您没有提供任何数据。父应用程序的stdin无法自动引导到子进程。假设您正在从主应用程序启动两个进程。输入应转到哪个子进程


    如果要与子进程通信,必须使用QProcess的QIODevice方法,并从该应用程序发送/读取数据。

    唯一合理的解决方案是在终端中启动目标应用程序。您自己的代码是提供终端窗口还是重用现有终端应用程序取决于您。

    我不确定是否理解您的问题。。您是否正在尝试编写使用QProcess启动其他应用程序的应用程序?在这种情况下,您必须明确地处理如何将用户输入发送到您的子应用程序。void main window::在按钮上单击(){QProcess p1;p1.execute(“./obj.out”)}这是我的代码。obj.out有许多cin和cout。如何处理?第一个cout出现在creator的应用程序输出窗口中。我想如果我能从obj.out中获取std::cin和std::cout,使其出现在gcc中这样的终端上,这个问题就会解决away@user1484717-这就是我在回答中试图解决的问题。我用一些实现提示修改了它。谢谢。我启动了一个终端窗口,并且能够管理它