0

我正在使用 Ubuntu 和 Qt Creator 4

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

我试过 system() 和 QProcess p1; p1.start(./abc.out);

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

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

输入名字:

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

4

3 回答 3

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输出,可以使用readQProcess的方法和朋友。
于 2012-06-27T09:03:04.653 回答
0

From your question I assume that you are writing an application that launches other applications using QProcess. Thats fine, but if your subprocess is waiting for data from the standard input it will wait forever since you did not provide any data. The stdin of your parent application cannot be automatically guided to the subprocess. Imagine you are starting two processes from your main app. To which child process should the input go?

If you want to communicate with child processes, you must use the QIODevice methods of QProcess and send/read data from/to that application.

于 2012-06-27T09:26:15.233 回答
0

The only sensible solution is to launch the target application in a terminal. Whether your own code provides the terminal window or you reuse an existing terminal application is up to you.

于 2012-06-27T17:42:20.170 回答