Qt::QWindow多窗口争抢置顶状态解决方案

admin 2022年10月2日07:34:40评论187 views字数 556阅读1分51秒阅读模式

有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上。

Qt提供的置顶方式是在windowsflags上增加标签,setWindowFlags(Qt::WindowStaysOnTopHint);但是针对两个window窗口,当焦点切换的时候两个窗口会互相抢占置顶效果,达不到我们预期的效果。

这个问题之前也思考了很久有什么比较巧妙的方案来实现,最后确定一个不算很完美的方案(如果有看到的朋友有更好的方案欢迎分享):通过父子窗口的指定来完成。

就像窗口布局一个label一样,label一定是在foreground,窗口自己在background。所以需要在上面的窗口指定为在下面的窗口为父窗口,则可以实现预期效果。

请注意,两个窗口必须是window类型,也就是setWindowFlags(Qt::Window)或者setWindowFlags(Qt::Tool)。如果是widget指定了父窗口范围只能在父窗口内移动(或者说以父窗口的坐标系为相对坐标系)。具体代码就不po了,有需要和兴趣的大家可以自己写个demo测试一下,几行代码即可。



原文始发于微信公众号(汇编语言):Qt::QWindow多窗口争抢置顶状态解决方案

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月2日07:34:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Qt::QWindow多窗口争抢置顶状态解决方案https://cn-sec.com/archives/1330177.html

发表评论

匿名网友 填写信息