【问题标题】:how to connect two programs (c++,qt)如何连接两个程序(c++,qt)
【发布时间】:2011-05-02 10:02:01
【问题描述】:

我有 2 个程序。控制台和 QT。控制台程序应该制作一些数据,而 qt 程序应该显示这些数据。但这应该是单独的程序,我不知道如何告诉 QT 程序从我的控制台做某事。两个程序是本地的,Qt 程序一直在运行(所以我不能每次都运行它),并且控制台只在需要时才使用。所以问题是 - 控制台程序完成后如何在 Qt 中执行某些操作? 附:控制台程序生成一个 Qt 程序可以读取并显示的文件。 我正在使用 Windows。

【问题讨论】:

  • 考虑使用dbusad 进程间通信?

标签: c++ windows qt console ipc


【解决方案1】:

Int Qt,你可以用QProcess启动控制台进程。该类具有finished 信号,您可以将其连接到应用程序对象中的插槽。然后,当控制台进程完成时,finished 信号将触发,并调用您的 slot 函数。此时您可以读取输出文件。

这比QFileSystemWatcher 更有效,因为您正在直接观看相关事件(控制台程序结束)。

【讨论】:

  • 我实际上也更喜欢这个而不是我自己的解决方案,但问题自然是必须从 Qt 程序内部启动控制台程序,这使得非交互式(例如计划)运行更加复杂.当然也可以做成同时支持这两种方式。
【解决方案2】:

您可以考虑使用QFileSystemWatcher 之类的东西来轮询特定目录中的更改,然后让您的控制台程序将文件写入那里。这样,当目录内容发生变化时,Qt 程序就会收到通知。

【讨论】:

    【解决方案3】:

    进程间通信 (IPC) 是您正在寻找的解决方案。

    MSDN 文档位于here,其中包含有关在您的应用程序中实现此功能的更多详细信息以及代码示例。

    【讨论】:

      【解决方案4】:

      这种技术称为“屏幕抓取”。您通过将控制台应用程序的标准输出连接到 Qt 应用程序输入来执行此操作。 看http://doc.qt.nokia.com/latest/qprocess.html

      【讨论】:

        【解决方案5】:

        看看QSharedMemory:http://doc.qt.nokia.com/4.7-snapshot/qsharedmemory.html。它允许线程间和进程间通信。

        这里有一个关于如何使用 QSharedMemory 的非常好的简短示例:http://doc.trolltech.com/main-snapshot/ipc-sharedmemory.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-29
          • 2011-03-01
          • 1970-01-01
          • 2013-08-30
          相关资源
          最近更新 更多