Qt::QWindow多窗口爭搶置頂狀態解決方案


有時候我們會有這種需求,自己的桌面程序需要置頂,但是程序包含了很多窗口,可能我們要求窗口1,2都在其它桌面程序之上,但是窗口1必須隨時在窗口2之上。

Qt提供的置頂方式是在windowsflags上增加標簽,setWindowFlags(Qt::WindowStaysOnTopHint);但是針對兩個window窗口,當焦點切換的時候兩個窗口會互相搶占置頂效果,達不到我們預期的效果。

這個問題之前也思考了很久有什么比較巧妙的方案來實現,最后確定一個不算很完美的方案(如果有看到的朋友有更好的方案歡迎分享):通過父子窗口的指定來完成。

就像窗口布局一個label一樣,label一定是在foreground,窗口自己在background。所以需要在上面的窗口指定為在下面的窗口為父窗口,則可以實現預期效果。

請注意,兩個窗口必須是window類型,也就是setWindowFlags(Qt::Window)或者setWindowFlags(Qt::Tool)。如果是widget指定了父窗口范圍只能在父窗口內移動(或者說以父窗口的坐標系為相對坐標系)。具體代碼就不po了,有需要和興趣的大家可以自己寫個demo測試一下,幾行代碼即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM