如何调用期望从QtGui输入stdin的应用程序?

时间:2012-06-27 08:53:32

标签: qt executable qprocess

我正在使用Ubuntu和Qt Creator 4

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

我已经尝试过system()和 也, QProcess p1; p1.start(./ abc.out);

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

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

输入名称:

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

3 个答案:

答案 0 :(得分:1)

你的意思是Qt Creator 2.4吗?在任何情况下,在“项目”选项卡上,您都应找到“运行设置”部分,然后可以在此处找到“运行终端”复选框。您还可以使用自定义可执行文件选项并在其中键入:gnome-terminal --command ./abc.out具体细节因我使用Qt Creator 2.5而有所不同。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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