【问题标题】:Send events between two Qt windows在两个 Qt 窗口之间发送事件
【发布时间】:2013-11-07 13:40:59
【问题描述】:

我创建了一个名为my-app 的Qt 应用程序。我通过在终端中输入来启动它:

./my-app

现在我想在同一个应用程序的两个独立窗口之间发送一个事件。所以,假设我有两个终端选项卡,我输入 my-app 开始:

./my-app 1
./my-app 2

应用程序的第一个实例 (./my-app 1) 是否可以向第二个实例发送事件,并且当第二个窗口接收到此事件时使用qDebug() 在终端中打印某些内容(可能使用传入 @ 的第二个参数987654327@)?

如果是,怎么做?

【问题讨论】:

  • 通过 QTcpSocket 通信?
  • @vahancho 我不知道。我想像jQuery.on('eventName', handler)jQuery.trigger('eventName'); 这样的东西。我会选择最简单的方法……我不是 Qt 专业人士……
  • 从你的问题我得出的结论是即使它是同一个应用程序,但它有两个不同的实例,所以你必须考虑它们之间的IPC。
  • @vahancho 是的,它们是两个(或多个)不同的窗口(实例),所以我不知道它们如何通信......

标签: c++ qt


【解决方案1】:

Qt 提供了多种应用程序之间的通信方式。如果应用程序要在同一台机器上运行,那么我建议你看看使用QLocalServerQLocalSocket

应用程序的第一个实例可以查看它是否可以连接到 QLocalServer,如果失败,则创建自己的。

使用起来并不难,如果您查看 Qt 示例,您应该会找到一个 QLocalSocket 示例来演示如何使用它。

在 Windows 上,QLocalSockets 使用命名管道,因此非 Qt 应用也可以连接到它。

Qt 中的fortuneServer 示例展示了如何使用 QTcpSocket 和 QTcpServer,并且 QLocalSocket 和 QLocalServer 的接口几乎相同

【讨论】:

    【解决方案2】:

    即使你使用同一个应用程序,你也会运行不止一个实例,因此你需要实现进程之间的通信。在这方面,我建议阅读 Qt 文档中的following paragraphs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 2017-09-15
      相关资源
      最近更新 更多