首页 文章

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

提问于
浏览
0

我正在使用Ubuntu和Qt Creator 4

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

I've tried system() and also, QProcess p1; p1.start(./abc.out);

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

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

enter name:

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

3 回答

  • 1

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

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

  • 0

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

  • 0

    你的意思是Qt Creator 2.4吗?在任何情况下,在“项目”选项卡上,您都应找到“运行设置”部分,然后可以从中找到"Run in terminal"复选框 . 你也可以使用自定义可执行文件选项并在那里输入: gnome-terminal --command ./abc.out 由于我使用的是Qt Creator 2.5,确切的细节可能会有所不同 .

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

    • 从QtGui启动一个终端窗口(类似于 QProcess::execute("gnome-terminal --command ./abc.out"); ),虽然问题是不同的系统有不同的终端名称 .

    • 自己提供一个Qt输入/文本框作为GUI的一部分,然后将用户输入转发给可执行文件(类似于 myqprocess.write(input_asked_from_user_by_QtGui); ) . 在这里,您可能需要事先了解要向用户询问的信息 . 如果要显示已启动进程的cout输出,可以使用 read 方法和QProcess的朋友 .

相关问题