2016-12-27 4 views
0

今日のソフトウェアアプリケーションの多くと同じように、私のプログラムはフレームレスウィンドウを持っていて、OSに合わせるためにドロップシャドウが残っているようにしたい。最初のステップは、ウィンドウフラグをQt::FramelessWindowHintに設定してフレームを削除することでした。しかし、トリッキーな部分は、ウィンドウの外側にドロップシャドウを追加することです。すべてを保持する小さなベースウィジェットにQGraphicsDropShadowEffectを追加し、Qt::WA_TranslucentBackgroundをtrueに設定してQMainWindowを透過にしました。フレームレスウィンドウシャドーのQGraphicsDropShadowEffectに代わるもの

これは、ウィンドウのサイズ変更を可能にするためにQSizeGripを追加するまで、私にとっては良い解決策と思われます。ウィンドウのサイズが変更されるたびに、paintイベントが呼び出され、QGraphicsDropShadowEffectを再計算する必要があります。これにより、スーパー・サイズが不安定になり、パフォーマンスが大幅に低下します。

QGraphicsDropShadowEffectの代替手段はありますか?

+0

はあなたのコードを表示を解決してください、私はうまくいけば、より良いガイドラインに従うことを私の質問を編集し – eyllanesc

+0

わかりました。 – mrg95

答えて

0

まだ私が見たことのない自分の解決策を思いついた。

私は、一連のレイアウトに配置されたときにドロップシャドウの錯覚を与える12のPNGイメージを作成しました。私はこれを行う多くの方法があると確信していますが、私がしたことは、それぞれの側面を3つの部分に分割していました。これは、ドロップシャドウを設定することができ、多くの異なる方法を占め(オフセットおよびコーナーラウンディング)

ここでは誇張された図です:

shadow_example

赤い領域は、外側の角に合わせピックスマップのアイコンでQLabelさんです。紫色の部分は、QLabelのもので、背景イメージが繰り返されています。赤色の領域のサイズは固定ですが、紫色の領域は最小/最大サイズとレイアウトのストレッチを介して自由に拡張できます。上下の辺は水平レイアウトで、左右の辺は垂直レイアウトです。

これは私のユースケースのために非常にうまく機能し、すべての途切れ途切れの問題:)