Qt父窗口与子窗口间的焦点传递问题的完美解决(简便实用)

Qt父窗口与子窗口间的焦点传递问题的完美解决方案(简便实用)@Qt

Qt焦点传递Bug问题完美解决方案

本文主要针对的问题为父窗口与子窗口的焦点传递问题,这里主要针对父窗口焦点如何传递给子窗口。本人由于需要做数控系统二次开发软件,不得不使用焦点的传递,而在切换中出现了问题,且搜索了很多方案,发现涉及较少,且全部没用!!!!是全部没用,而且很麻烦,最终五个小时摸索了一种容易解决的方案!!!可能菜叭,不喜勿喷!

网络搜索方案问题汇总

这里总结一下网络搜索和自己试探的各种方案的问题,主要是总结Qt这个焦点传递的硬伤Bug,不喜勿喷,可以不看。
首先关于SetFocus函数的使用,作用是使某个部件获得焦点,但实际上,会出现很多Bug,首先这个函数的使用取决于目前焦点所在的窗口,此函数只对目前窗口的部件生效,可以使它们获得焦点,但是对此窗口的子窗口以及子窗口的部件无效。也就是说,如果目前你的焦点位于父窗口,那么SetFocus函数对子窗口无效,无论子窗口是否设置为可获得焦点类型!
其次,某些方案说为了使得焦点始终位于某个窗口,使新出现的窗口不获得焦点,以实现焦点待在旧的窗口上。但是实际使用时无效。当设置新窗口不会获得焦点时,新窗口出现时,新窗口无焦点,且旧窗口也无焦点,基本上焦点算是丢失了,再怎么点Tab也没用。

完美解决方案

完美解决方案,结合了我上面说的关于SetFocus函数的使用局限性。首先,为了实现父窗口的焦点向子窗口的传递,可以调用子窗口的activateWindow()函数,即激活窗口,如此,子窗口就像重新显示一样,便获得了焦点!完美解决了,在此之后,由于焦点已经在子窗口上了,所以我们也可以调用SetFocus函数将焦点转移至子窗口的相关部件上!
经过测试,发现问题完美解决。

来源:Hoarce

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月6日
下一篇 2020年6月6日

相关推荐