• 8681阅读
  • 15回复

[提问]qt编写一个只能运行单个实例的程序,不用Windows API [复制链接]

上一主题 下一主题
离线mrmagic
 

只看楼主 倒序阅读 楼主  发表于: 2016-08-15
qt编写一个只能运行单个实例的程序,当程序已经运行时,再次双击程序图标,已运行的程序最大化置顶显示,只用qt的API能否实现?
离线kimtaikee

只看该作者 1楼 发表于: 2016-08-15
QtSingleApplication
http://code.qt.io/cgit/qt-solutions/qt-solutions.git/tree/qtsingleapplication

离线6gongzi

只看该作者 2楼 发表于: 2016-08-16
可以
离线mrmagic

只看该作者 3楼 发表于: 2016-08-16
回 kimtaikee 的帖子
kimtaikee:QtSingleApplication
http://code.qt.io/cgit/qt-solutions/qt-solutions.git/tree/qtsingleapplication
 (2016-08-15 21:47) 

已打开的程序最小化了怎么使它最大化显示出来呢?
离线cjmdaixi

只看该作者 4楼 发表于: 2016-08-16
通过QSettings就可以实现。程序启动时,首先检查QSettings中是否能找到已启动程序的HANDLE,没有的话启动该程序然后通过QSettings设置该HANDLE为当前程序,否则启动QSettings中找到的HANDLE,退出当前程序。该好处是,你可以通过QSettings传递任意多的信息,包括最大化最小化窗体等等,都由你控制。

而且重要的是,平台无关。
离线llong

只看该作者 5楼 发表于: 2016-08-16
QLocalSocket/QLocalServer
离线mrmagic

只看该作者 6楼 发表于: 2016-08-16
回 6gongzi 的帖子
6gongzi:可以 (2016-08-16 08:41) 

怎么实现呢?
离线mrmagic

只看该作者 7楼 发表于: 2016-08-16
回 cjmdaixi 的帖子
cjmdaixi:通过QSettings就可以实现。程序启动时,首先检查QSettings中是否能找到已启动程序的HANDLE,没有的话启动该程序然后通过QSettings设置该HANDLE为当前程序,否则启动QSettings中找到的HANDLE,退出当前程序。该好处是,你可以通过QSettings传递任意多的信息,包括最大化最小化窗体 .. (2016-08-16 10:55) 

具体如何实现呢?
离线wangqi

只看该作者 8楼 发表于: 2016-08-16
大神门看看我的求助啊,。挂了好几天了解决不了,谢谢啊
血染琴弦,知音一生难求;泪洒青冢,黄土一抔尽掩。
离线kimtaikee

只看该作者 9楼 发表于: 2016-08-16
回 wangqi 的帖子
wangqi:
大神门看看我的求助啊,。挂了好几天了解决不了,谢谢啊

代码都给你了,直接用。
附件: qtsingleapplication-master.zip (79 K) 下载次数:15

离线mrmagic

只看该作者 10楼 发表于: 2016-08-16
回 kimtaikee 的帖子
kimtaikee:代码都给你了,直接用。 (2016-08-16 16:31) 

这个只有单例程序运行的功能,当程序已经打开并且最小化没将其最大化显示出来
离线stlcours

只看该作者 11楼 发表于: 2016-08-17
回 cjmdaixi 的帖子
cjmdaixi:通过QSettings就可以实现。程序启动时,首先检查QSettings中是否能找到已启动程序的HANDLE,没有的话启动该程序然后通过QSettings设置该HANDLE为当前程序,否则启动QSettings中找到的HANDLE,退出当前程序。该好处是,你可以通过QSettings传递任意多的信息,包括最大化最小化窗体 .. (2016-08-16 10:55) 

请问你这个HANDLE是什么意思呢?是Windows的句柄吗?如果是这样,岂不是与平台相关了?
另外你说的“否则启动QSettings中找到的HANDLE”,请问怎样才能启动另一个程序呢,即使已经知道它的Handle。

我的理解,你这个QSetting就是一个共享文件,把需要的信息都提前写在里面,请问是这样吗?
离线mrmagic

只看该作者 12楼 发表于: 2016-08-19
问题已解决,谢谢各位!
离线stlcours

只看该作者 13楼 发表于: 2016-08-19
回 mrmagic 的帖子
mrmagic:问题已解决,谢谢各位! (2016-08-19 08:44) 

怎么解决的,具体数一下行吗?特别是激活前一个程序。
离线cjmdaixi

只看该作者 14楼 发表于: 2016-08-22
回 mrmagic 的帖子
mrmagic:问题已解决,谢谢各位! (2016-08-19 08:44) 

这种结贴方式真是无语,既然问题已解决,为什么不说下怎么解决的、用了什么方法?你这样以后谁还会帮你呢?论坛的帖子最重要的是帮助后来的学习者有个完整的上下文,你这样子的话,等于我们前面帮你写的那些东西都白写了。
离线mrmagic

只看该作者 15楼 发表于: 2016-08-22
不好意思哈,采用的是5楼提到的QLocalSocket/QLocalServer的方法,具体代码可以看http://wenku.baidu.com/view/e9a2da0577232f60dccca125.html?from=search
快速回复
限100 字节
 
上一个 下一个