有時候我們會有這種需求,自己的桌面程序需要置頂,但是程序包含了很多窗口,可能我們要求窗口1,2都在其它桌面程序之上,但是窗口1必須隨時在窗口2之上。
Qt提供的置頂方式是在windowsflags上增加標簽,setWindowFlags(Qt::WindowStaysOnTopHint);但是針對兩個window窗口,當焦點切換的時候兩個窗口會互相搶占置頂效果,達不到我們預期的效果。
這個問題之前也思考了很久有什么比較巧妙的方案來實現,最后確定一個不算很完美的方案(如果有看到的朋友有更好的方案歡迎分享):通過父子窗口的指定來完成。
就像窗口布局一個label一樣,label一定是在foreground,窗口自己在background。所以需要在上面的窗口指定為在下面的窗口為父窗口,則可以實現預期效果。
請注意,兩個窗口必須是window類型,也就是setWindowFlags(Qt::Window)或者setWindowFlags(Qt::Tool)。如果是widget指定了父窗口范圍只能在父窗口內移動(或者說以父窗口的坐標系為相對坐標系)。具體代碼就不po了,有需要和興趣的大家可以自己寫個demo測試一下,幾行代碼即可。