【问题标题】:Make the second instance of a Qt5 application transfer command line arguments to the first instance使 Qt5 应用程序的第二个实例将命令行参数传输到第一个实例
【发布时间】:2016-08-05 01:51:45
【问题描述】:

我正在制作一个读取某种类型文件的 Qt 5 应用程序,我想将其限制为一个实例。我想将命令行参数从第二个实例传输到第一个实例,以便在用户双击该文件时打开一个文件。

我发现的大多数信息都只是简单地禁用运行第二个实例而不传递数据。我找到了QLocalServer,但显然它不会在GNU/Linux 上的应用程序崩溃时被破坏,我还找到了boost::interprocess::message_queue,但看起来我必须有一个专用线程来读取它。这是我发现的最接近的东西:https://github.com/itay-grudev/SingleApplication/ 它提供了一个我可以收听的信号,但不幸的是没有提供传递命令行的选项。

什么是最好的解决方案?我关心的操作系统是 GNU/Linux、Mac、Windows,最好是 Android。

【问题讨论】:

  • 你想要 QtSingleApplication。
  • @peppe 如果您提供分步解决方案,我会尝试并接受它是否有效。我以前只发现过这个的 Qt 4 版本。
  • QtSingleApplication 在 Qt 5 中工作了一段时间。您可以从here 获取它,或者从here 获取它的改进分支。然后您只需使用它代替Q(Core)Application,它会在另一个对等点连接到您的实例时为您提供信号,以及向正在运行的实例发送数据的方法。有关示例,请参见 here
  • 好的,我搞定了。做出回答并接受。

标签: c++ qt qt5 c++14


【解决方案1】:

另一种方法是使用预定义的套接字名称或本地 TCP 套接字(在不支持 unix 套接字的平台上)创建和绑定 unix 域套接字。绑定仅对您的应用程序的第一个实例成功。当应用程序因任何原因终止时,操作系统会取消绑定套接字。当bind() 失败时,意味着该应用程序的另一个实例已经在运行。第二个实例可以connect() 并使用此套接字将其命令行参数传递给第一个实例。

【讨论】:

    【解决方案2】:

    好的,我已经按照@peppe 的建议使用了this example 中的代码,并且成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多