找回密码
 立即注册
收起左侧

如何保证若界面已最小化若再次运行程序则这个界面showNormal

7
回复
10080
查看
[复制链接]
累计签到:70 天
连续签到:1 天
来源: 2016-2-3 10:19:04 显示全部楼层 |阅读模式
3Qter豆
做综合监控系统的项目,原qt3的工程有接口(不知道是qt实现的还是mfc)保证进程唯一,且在消息子类存了界面指针,再次运行程序则会检查确保进程唯一并通过这个指针来对界面showNormal。貌似现在qt不允许这样了,崩溃错误说是不同的thread。那么如何实现呢?新手,对编码也了解的不太清楚,表述错误的地方还请见谅啊。是不是需要做qt的进程间通讯啊?我的想法是界面定义个标志位,再次启进程则通过消息类存的指针改变这个标志位而不是直接对界面进行操作。界面定义个QTimer回调判断标志位来决定是否showNormal。不过这样的话系统改动太大了。好郁闷,到底要怎么做。。。

最佳答案

查看完整内容

可否这样考虑: 1、程序启动的时候,依据进程名字判断进程是否已经启动,如果已经启动,退出,但是推出之前做一件事情,通过管道给已经启动的程序发送一个消息。如果没有启动,则启动,同时开启管道,接受重复开启的指令。 2、当管道收到数据的时候,shownormal。当然,管道应该是以线程的形式启动。 你说的进程间的通讯我认为是必要的,要不然进程如何知道另一进程已经启动了呢?管道是进程通讯的一种。 ...
回复

使用道具 举报

累计签到:18 天
连续签到:1 天
2016-2-3 10:19:05 显示全部楼层
可否这样考虑:
1、程序启动的时候,依据进程名字判断进程是否已经启动,如果已经启动,退出,但是推出之前做一件事情,通过管道给已经启动的程序发送一个消息。如果没有启动,则启动,同时开启管道,接受重复开启的指令。
2、当管道收到数据的时候,shownormal。当然,管道应该是以线程的形式启动。


你说的进程间的通讯我认为是必要的,要不然进程如何知道另一进程已经启动了呢?管道是进程通讯的一种。
回复

使用道具 举报

累计签到:70 天
连续签到:1 天
2016-2-3 11:44:51 显示全部楼层
konin 发表于 2016-2-3 10:41
可否这样考虑:
1、程序启动的时候,依据进程名字判断进程是否已经启动,如果已经启动,退出,但是推出之前 ...

谢谢。我想我大概明白怎么做了。qt4以后的版本,子线程不能直接操控界面及其控件了是不?
回复

使用道具 举报

累计签到:18 天
连续签到:1 天
2016-2-3 15:18:28 显示全部楼层
d799060786 发表于 2016-2-3 11:44
谢谢。我想我大概明白怎么做了。qt4以后的版本,子线程不能直接操控界面及其控件了是不? ...

没有这么操作过,但是我猜应该  线程应该是可以操作控件的吧,为什么不可以呢?
回复

使用道具 举报

累计签到:70 天
连续签到:1 天
2016-2-3 15:56:01 显示全部楼层
konin 发表于 2016-2-3 15:18
没有这么操作过,但是我猜应该  线程应该是可以操作控件的吧,为什么不可以呢? ...

Although QObject is reentrant, the GUI classes, notably QWidget and all its subclasses, are not reentrant. They can only be used from the main thread.
回复

使用道具 举报

尚未签到

2016-2-6 13:50:25 显示全部楼层
的确,qt有规定,凡是界面有关的,必须在主进程。包括widget和quick
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2016-2-16 08:48:08 显示全部楼层
可以用socket...
回复

使用道具 举报

累计签到:70 天
连续签到:1 天
2016-2-23 18:11:26 显示全部楼层
最终解决:
1.确保进程唯一依靠我们自己的系统封装好的进程管理类来处理了,这点没做修改。
2.再次启动进程界面最小化则让其shownormal:在系统的消息类里不再直接操控界面指针让其shownormal,而是调用界面类的成员函数,这个函数只做一件事:发个信号。接收者为其自身,当接到信号时,shownormal就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了