2013-09-30 61 views
1

我想打開幾個彈出窗口(頂層),這是無框。我可以做到這一點:Qt +無框窗口+合成

window.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) 

但問題是,Windows,不經過OS合成器(例如在Windows上他們沒有陰影)。 我可以通過Qt.Popup和Qt.ToolTip標誌實現窗口陰影,但這兩個標誌都有行爲問題,工具提示總是處於頂部,彈出窗口在焦點丟失時關閉。

那麼,有什麼辦法可以顯示默認的OS窗口管理器陰影效果的無框窗口?

+0

請檢查這一點,我不知道這是否是你想要什麼,但對於一個幀少的窗口,你需要繪製陰影效果http://stackoverflow.com/questions/12347776/how-to-put-a-shadow-a-frameless-window-in-qt –

+0

是的,我看到那篇文章。但是這並不符合我的程序需求,我正在開發一個在桌面上顯示彈出窗口的應用程序(需要隱藏)。所以我需要默認的OS合成器,就像其他桌面級窗口一樣 – sepul

回答

1

在Windows上找到解決方法。但我無法用Qt來完成,所以我使用了win32 hack。
此添加給QWidget類的構造函數:

if sys.platform == 'win32': 
    import win32api 
    win32api.SetClassLong(eval(self.winId().__hex__()), -26, 0x0008 | 0x00020000) 

我實際添加CS_DROPSHADOW風格窗口類風格

1

這可能有助於爲下用戶使用Qt.ToolTip標誌,避免總是在具有工具提示最佳。

Python代碼

self.setWindowFlags(self.windowFlags() | Qt.ToolTip) 
self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)