我有一个运行主应用程序的工具 - 两者都是QApplications
。
在该工具中,我将主应用程序作为QProcess::startDetached("myapp.exe", QStringList() << "-arg1" << "-arg2", "C:/myFolder/");
然后该工具完成其工作,主应用程序仍在工作。
我可以再次启动该工具,并通过QSharedMemory
发送命令。
但是如果主应用程序打开了模态对话框,它就无法处理新命令。
我需要从工具中确定主应用程序正忙于模态对话框并返回某种错误。
任何人都可以告诉我这是最简单的方法。
我有两个想法,但他们真的不知道它们是否有效:
使用QApplication::activeModalWidget()
,但如何从该工具中获取主应用的QApplication*
?
将主应用程序繁忙的信息放在共享内存中,工具会在关闭之前检查它。 - 我不确定主应用程序是否可以在共享内存中保存模式对话框时保存内容。
答案 0 :(得分:2)
就个人而言,我在主应用中使用QLocalServer,在工具中使用QLocalSocket。
当主应用程序启动时,它会启动本地服务器运行,允许工具连接到它并根据需要进行通信。
在最基本的级别,如果该工具可以连接到服务器,您就知道主应用程序正在运行。但是我建议在QSharedMemory上使用这个IPC机制。
正确完成后,该工具可以毫无问题地快速断开连接并重新连接。
Qt提供了如何将QLocalServer与QLocalSocket
一起使用的示例