2016-12-27 274 views
0

像今天的許多軟件應用程序一樣,我希望我的程序有一個無框窗口,仍然有一個陰影以使其更適合OS。第一步是將窗口標誌設置爲Qt::FramelessWindowHint以刪除框架。但棘手的部分是在窗口外部添加投影。我選擇將QGraphicsDropShadowEffect添加到更小的基本小部件中,該小部件可以容納所有內容,並通過將屬性Qt::WA_TranslucentBackground設置爲true來使QMainWindow變爲透明。替代QGraphicsDropShadowEffect無框窗口的陰影

這似乎是一個很好的解決方案,直到我添加了一個QSizeGrip來啓用調整窗口大小。每次調整窗口大小時,都會調用繪畫事件,並且需要重新計算QGraphicsDropShadowEffect。這會導致SUPER震盪調整大小,並導致性能下降。

QGraphicsDropShadowEffect有更好的表現嗎?

+0

顯示您的代碼,請 – eyllanesc

+0

好吧,我編輯我的問題,希望能夠遵循的準則更好。 – mrg95

回答

0

我想出了我自己的解決方案,我還沒有看到過。

我最終制作了12個PNG圖像,當它們排列在一組佈局中時,給出了投影陰影的錯覺。我確信有很多方法可以做到這一點,但我所做的是將每一面分成三部分。這解釋了許多不同的方式陰影可以設立(偏移和倒圓角)

下面是一個誇張圖:

shadow_example

紅色區域是QLabel的對齊到外眼角像素圖圖標。紫色區域是QLabel的重複背景圖像。紅色區域的大小是固定的,但紫色區域可以通過最小/最大尺寸和佈局拉伸進行自由擴展。頂部和底部邊緣是水平佈局,左側和右側邊緣是垂直佈局。

這都非常好,我的使用情況,並解決了所有問題波濤洶涌:)