单一应用实例,一窗数据刷新

Posted

技术标签:

【中文标题】单一应用实例,一窗数据刷新【英文标题】:SIngle instance of application, Data refresh in One Window 【发布时间】:2012-12-13 05:42:07 【问题描述】:

我在 Qt 中有一个应用程序。它是一个窗口。此窗口显示了某些数据。

此窗口是从另一个应用程序启动的。

很可能应用程序是从另一个应用程序的不同实例启动的,具有不同的数据。

假设我已经运行了一个应用程序实例,我如何确保如果再次调用该应用程序,它不应该启动另一个实例,而是应该使用新集合刷新现有窗口中的数据?

简而言之,一个应用程序有一个窗口,它显示与不同调用一起传递的刷新数据。

编辑:我检查了。应该足以解决我的问题。但是,我在 Qt 安装中找不到相关文件。我了解到它从来都不是 Qt 解决方案的一部分,必须手动下载。如果是这种情况,是否会影响任何许可问题?

编辑 2: 我有一个已经打开的应用程序的实例,比如说 A。我尝试启动实例 B。B 向 A 发送消息。 是否可以通过该消息检查A是否满足某些条件,然后决定是否打开B?

这样……

    A 已经在运行 B 现已推出 B 向 A 发送消息 A 尝试使用此消息确认某事 如果消息为真(比方说),保持 A 运行并将 B 作为新实例打开 如果不是...关闭 B,让 A 使用此新信息刷新数据

这是否可以使用 QtSingleApplication,尤其是第 6 步?或者新实例会在检测到已运行的实例后立即关闭?

另外,如何将 QtSingleApplication 集成到我的应用程序中?我只需要包含标题和cpp吗?我不希望构建一个 dll 并像那样工作。是否需要其他配置?

如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

【参考方案1】:

您正在寻找的是QtSingleApplication。当您第二次调用该应用程序时,您可以检查QtSingleApplication::isRunning() 以查看是否已经存在另一个实例。如果是这样,只需使用QtSingleApplication::sendMessage() 来提醒第一个实例已经调用了某些东西。只需将您的应用程序设置为能够接收这些消息(您可以通过连接到 QtSingleApplication::messageReceived() 信号来了解这些消息),并在收到该信号时做出相应的反应。

【讨论】:

非常感谢。我去看看。 我检查过了。应该足以解决我的问题。但是,我在 Qt 安装中找不到相关文件。我了解到它从来不是 Qt 解决方案的一部分,必须手动下载。如果是这种情况,是否会影响任何许可问题? 以“Qt”开头的类不是库的一部分,只有“Q”类与 qt 一起提供 - Qt 类是开发人员设计的附加组件 @user1173240 :源代码托管在 Gitorious。 git clone git://gitorious.org/qt-solutions/qt-solutions.git 下载源代码。至于许可,QtSolutions 和 Qt 一样是 LGPL。除非你因为不能使用 LGPL 而拥有 Qt 的商业许可证,否则你会没事的。 第二个实例调用sendMessage(),已经运行的实例接收到messageReceived()信号。在sendMessage() 的QString 参数中编码您希望传输的任何消息,这就是第一个实例将使用messageReceived() 接收的内容。

以上是关于单一应用实例,一窗数据刷新的主要内容,如果未能解决你的问题,请参考以下文章

如何确保核心数据实体的单一实例

iScroll 5 刷新封装实例应用

禁止程序多开,程序单一实例实现

AnyDAC - 编辑前刷新记录

html5本地存储应用实例,刷新后选项卡停留在点开页面

node.js 服务器是不是应该与 mysql 实例建立单一连接?