单一应用实例,一窗数据刷新
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()
接收的内容。以上是关于单一应用实例,一窗数据刷新的主要内容,如果未能解决你的问题,请参考以下文章