RectangularShadow QML Type

平滑化された矩形を作成します。詳細...

Import Statement: import QtQuick.Effects
Inherits:

Item

プロパティ

詳細説明

RectangularShadow は、ぼかしを適用した丸みを帯びた長方形です。RectangularShadow のパフォーマンスは、どのような形状のアイテムにもぼかした影/輝きを作成する一般的なものよりもはるかに優れています。

次の例では、Rectangle に影を付ける方法を示しています:

import QtQuick
import QtQuick.Effects

...
RectangularShadow {
    anchors.fill: myRectangle
    offset.x: -10
    offset.y: -5
    radius: myRectangle.radius
    blur: 30
    spread: 10
    color: Qt.darker(myRectangle.color, 1.6)
}
Rectangle {
    id: myRectangle
    anchors.centerIn: parent
    width: 200
    height: 100
    radius: 50
    color: "#c0d0f0"
}

RectangularShadowのAPIはCSSのbox-shadowに似ており、色、オフセット、広がり、ぼかしの値があります。さらに、RectangularShadowのAPIには以下が含まれる:

  • real radius矩形の角に適用される丸め半径を制御します。CSSのbox-shadowが親要素から半径を継承するのに対して、RectangularShadowはユーザーが半径を設定することを想定しています。これにより、異なる半径を使用したり、RectangularShadowを親アイテムとは別に移動させたりすることができます。
  • bool cached: ぼかしたシャドウのテクスチャをキャッシュできるようになりました。これは、特に動的に変化しない大きなシャドウで、レンダリングパフォーマンスを向上させる可能性がある一方で、メモリ使用量を増加させます。
  • item materialRectangularShadow の 要素を含みます。これにより、たとえば、カスタムシェーダーで効果を拡張できます。ShaderEffect

レンダリング出力もCSSのボックスシャドウと一致しますが、顕著な違いはほとんどありません。これらの違いは、RectangularShadowを可能な限り高性能にするために存在します。

  • ぼかしは、CSSボックスシャドウの実装でよく使われるガウスぼかしではなく、シェーダー内で数学的に計算されます。このため、特にぼかしの値が大きくなると、シャドウの見え方が若干異なります。
  • すべての矩形の角の半径は均等でなければなりません。異なる半径を持つRectangle にシャドウを作成する場合は、シャドウに最適な半径を選択するか、別のシャドウ方法、例えばMultiEffect を使用してください。

以下は、ChromeブラウザでのRectangularShadowとCSS box-shadowのレンダリング出力を比較したスクリーンショット付きの表です。一番右の要素はRectangularShadowのぼかしに1.2 (つまり24,48,48 )を掛けたもので、より近い一致が得られます。

タイプCSSボックスシャドウ長方形シャドウ長方形シャドウ+余分なぼかし
offset: (0, 0)
blur: 20
spread: 0

offset: (-10, -20)
blur:40
スプレッド: 0

offset: (-10, -20)
blur:40
スプレッド: 10

他のいくつかのシャドウ(CSS box-shadowを含む)がサイズに乗数を持つのに対し、RectangularShadowはぼかし量に関する正確な量でシャドウのサイズを拡張します。RectangularShadow内のシャドウアイテムのサイズは以下の通りです:

width = rectangularShadow.width + 2 * blur +  2 * spread
height = rectangularShadow.height + 2 * blur + 2 * spread

例えば、以下のコードのシャドウアイテムのサイズは280x180ピクセルです。半径やオフセットの値は、シャドウアイテムのサイズに影響しません。

RectangularShadow {
    width: 200
    height: 100
    blur: 30
    spread: 10
    radius: 20
}

プロパティの説明

antialiasing : bool

シャドウがアンチエイリアシングを使用するかどうかを決定するために使用されます。これがtrue の場合、blur0 の場合でも、1 ピクセルのアンチエイリアスが使用されます。

デフォルト値はtrue です。


blur : real

このプロパティは、アイテム領域の外側の何ピクセルに影が到達するかを定義します。

値の範囲は 0.0(ぼかしなし)から inf(無限ぼかし)までです。デフォルト値は10.0 です。

注: CSS のボックスシャドウのレンダリング出力に合わせるには、最適なぼかし量は次のようになります:1.2 * cssBlur


cached : bool

このプロパティは、レンダリングパフォーマンスを向上させるために、エフェクト出力ピクセルをキャッシュできるようにします。

エフェクトのプロパティが変更されるたびに、キャッシュ内のピクセルを更新する必要があります。エフェクト出力を保存するために余分なメモリバッファが必要になるため、メモリ消費量が増加します。

ソースまたはエフェクトプロパティがアニメートされているときは、キャッシュを無効にすることをお勧めします。

デフォルト値はfalse です。


color : color

このプロパティは、影に使用される RGBA カラー値を定義します。

デフォルト値はQt.rgba(0.0, 0.0, 0.0, 1.0) (黒)です。


material : item

このプロパティには、シャドウのShaderEffect 項目が含まれます。blur,offset,spread によって、効果項目はRectangularShadow 項目とは異なる位置とサイズを持つことが多いため、このプロパティを使用して影の到達点を視覚化することができます。

このマテリアルは、カスタムのものに置き換えることもできます。デフォルトのマテリアルはShaderEffect で、次のfragmentShader があります:

#version 440

layout(location = 0) in vec2 texCoord;
layout(location = 1) in vec2 fragCoord;
layout(location = 0) out vec4 fragColor;

layout(std140, binding = 0) uniform buf {
    mat4 qt_Matrix;
    float qt_Opacity;
    vec4 color;
    vec3 iResolution;
    vec2 rectSize;
    float radius;
    float blur;
};

float roundedBox(vec2 centerPos, vec2 size, float radii) {
    return length(max(abs(centerPos) - size + radii, 0.0)) - radii;
}

void main()
{
    float box = roundedBox(fragCoord - iResolution.xy * 0.5, rectSize, radius);
    float a = 1.0 - smoothstep(0.0, blur, box);
    fragColor = color * qt_Opacity * a * a;
}

Qt Quick エフェクトメーカーには ノードがあり、カスタムマテリアルの出発点として使用できます。そのノードを含むエクスポートしたエフェクトを マテリアルとして直接使用できます。RectangularShadow RectangularShadow

RectangularShadow {
    ...
    material: MyShadowEffect { }
}

デフォルトマテリアルの使用に戻るには、マテリアルのプロパティをnull に設定します。


offset : vector2d

このプロパティは、シャドウに使用される位置オフセットを定義します。このオフセットは、RectangularShadow アイテムの位置からの相対的なシャドウ位置に追加されます。

デフォルト値はQt.vector2d(0.0, 0.0) (オフセットなし)です。


radius : real

このプロパティは、角を丸くした影を描画するために使用される角の半径を定義します。

値の範囲は 0.0 からアイテムの有効幅または高さの半分のいずれか小さい方までです。

デフォルト値は0 です。


spread : real

このプロパティは、シャドウをピクセル単位でどれだけ広げるかを定義します。この広がりは、RectangularShadow アイテムのサイズに対する影のサイズに追加されます。

値の範囲は -inf から inf です。デフォルト値は0.0 です。

注意: spread による半径の動作は CSS の box-shadow の標準と一致します。つまり、スプレッドが半径より小さい場合、シャドウの半径はスプレッドの分だけ大きくなります。広がりが大きくなると、半径は部分的にしか大きくなりません。https://www.w3.org/TR/css-backgrounds-3/#shadow-shape を参照してくださいシャドウの半径がシャドウの成長と同期して成長する必要がある場合(Firefox CSS box-shadow 実装のように)、spread を使用する代わりに、RectangularShadow widthheight を増やしてください。


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.