0

我有两个Qt应用程序共享一个内存段。

在此处输入图像描述

我希望能够从 App2 发出信号并从 App1 触发插槽。首先,我需要使用QObject::connect()将 App2 信号链接到 App1 插槽。

有没有连接两个不同Qt进程信号/插槽机制的好方法?我偶然发现了qt-remote-signals库来发送远程信号,它QDataStream用于序列化对象。QSharedMemory使用相同的类。

还是我应该忘记连接任何东西而只是模拟信号/插槽行为?

  1. 从 App2 写入内存段
  2. 每当它从 App1 更改时读取该段(如何知道它何时更新?)
  3. 从 App1 发出自定义信号
  4. 从 App1 触发一个插槽

这听起来现实吗?我是共享内存的新手。

4

1 回答 1

1

据我所知,您无法在进程之间连接信号/插槽。如果另一个进程更改了 QSharedMemory,您也无法知道“自然”。

所以我认为你必须像你说的那样模拟它。

  1. 从 App2 写入内存段
  2. 应用程序 1 可以定期检查该段,以了解应用程序 2 的更改。一旦更改完成,您直接触发插槽(您实际上并不需要信号)

如果您需要来自 App1 的即时响应(而不使 App 1 检查时间太小),您可以使用 QLocalSocket/Server 或 D-Bus 让它们通信,但在这种情况下,您可以全力以赴并管理所有通信,使QSharedMemory 是不必要的。

于 2017-07-12T09:26:44.697 回答