Тип QML DropShadow
Создаёт мягкую тень позади исходного элемента. Подробнее...
| Заявление об импорте: | import QtGraphicalEffects 1.15 |
| С тех пор: | QtGraphicalEffects 1.0 |
| Наследует: |
Свойства
- cached : псевдоним
- color : псевдоним
- horizontalOffset : вещественное
- radius : целое число
- samples : псевдоним
- source : псевдоним
- spread : псевдоним
- transparentBorder : псевдоним
- verticalOffset : вещественное
Подробное описание
Эффект DropShadow размывает альфа-канал входного значения, окрашивает результат и размещает его позади исходного объекта, создавая мягкую тень. Цвет тени можно изменить, используя свойство color. Положение тени можно изменить с помощью свойств horizontalOffset и verticalOffset.
| Исходный элемент | Применяемый эффект |
|---|---|
Мягкая тень создаётся путём размытия изображения в реальном времени с помощью гауссова размытия. Выполнение размытия в реальном времени — ресурсоёмкая операция. Полное гауссово размытие даже с умеренным количеством образцов будет работать только со скоростью 60 кадров в секунду на графическом оборудовании высокого класса.
Когда исходный элемент статичен, свойство cached можно установить для выделения другого буфера, чтобы избежать выполнения размытия каждый раз при отрисовке.
Примечание: Этот эффект доступен при работе с OpenGL.
Пример
Следующий пример демонстрирует применение эффекта.
import QtQuick 2.12
import QtGraphicalEffects 1.12
Item {
width: 300
height: 300
Rectangle {
anchors.fill: parent
}
Image {
id: butterfly
source: "images/butterfly.png"
sourceSize: Qt.size(parent.width, parent.height)
smooth: true
visible: false
}
DropShadow {
anchors.fill: butterfly
horizontalOffset: 3
verticalOffset: 3
radius: 8.0
samples: 17
color: "#80000000"
source: butterfly
}
} Документация свойств
cached : псевдоним
Это свойство позволяет кэшировать пиксели вывода эффекта для повышения производительности рендеринга. Каждый раз при изменении исходного элемента или свойств эффекта пиксели в кэше должны обновляться. Потребление памяти увеличивается, поскольку для хранения вывода эффекта требуется дополнительный буфер памяти.
Рекомендуется отключать кэш при анимации исходного элемента или свойств эффекта.
По умолчанию свойство установлено в false.
color : псевдоним
Это свойство определяет значение цвета RGBA, используемое для тени.
По умолчанию свойство установлено в "black".
| Примеры вывода с различными значениями цвета | ||
|---|---|---|
| color: #000000 | color: #0000ff | color: #aa000000 |
| radius: 8 | radius: 8 | radius: 8 |
| samples: 17 | samples: 17 | samples: 17 |
| horizontalOffset: 0 | horizontalOffset: 0 | horizontalOffset: 0 |
| verticalOffset: 20 | verticalOffset: 20 | verticalOffset: 20 |
| spread: 0 | spread: 0 | spread: 0 |
horizontalOffset : вещественное
Свойства HorizontalOffset и verticalOffset определяют смещение отрисованной тени по отношению к позиции элемента DropShadow. Часто элемент DropShadow закрепляется так, чтобы заполнять исходный элемент. В этом случае, если свойства HorizontalOffset и verticalOffset установлены в 0, тень отрисовывается точно под исходным элементом. Изменяя свойства смещения, тень можно позиционировать относительно исходного элемента.
Значения колеблются от -inf до inf. По умолчанию свойства установлены в 0.
| Примеры вывода с различными значениями horizontalOffset | ||
|---|---|---|
| horizontalOffset: -20 | horizontalOffset: 0 | horizontalOffset: 20 |
| radius: 4 | radius: 4 | radius: 4 |
| samples: 9 | samples: 9 | samples: 9 |
| color: #000000 | color: #000000 | color: #000000 |
| verticalOffset: 0 | verticalOffset: 0 | verticalOffset: 0 |
| spread: 0 | spread: 0 | spread: 0 |
radius : целое число
Радиус определяет мягкость тени. Более большой радиус приводит к тому, что края тени выглядят более размытыми.
Оптимальное размытие достигается путём выбора samples и radius таким образом, что samples = 1 + radius * 2, например:
| Радиус | Образцы |
|---|---|
| 0 (без размытия) | 1 |
| 1 | 3 |
| 2 | 5 |
| 3 | 7 |
По умолчанию свойство установлено в floor(samples/2).
| Примеры вывода с различными значениями радиуса | ||
|---|---|---|
| radius: 0 | radius: 6 | radius: 12 |
| samples: 25 | samples: 25 | samples: 25 |
| color: #000000 | color: #000000 | color: #000000 |
| horizontalOffset: 0 | horizontalOffset: 0 | horizontalOffset: 0 |
| verticalOffset: 20 | verticalOffset: 20 | verticalOffset: 20 |
| spread: 0 | spread: 0 | spread: 0 |
samples : псевдоним
Это свойство определяет, сколько образцов берётся на пиксель при расчете размытия смягчения краёв. Большее значение обеспечивает лучшее качество, но замедляет рендеринг.
В идеале это значение должно быть в два раза больше наибольшего требуемого значения радиуса плюс единица, например:
| Радиус | Образцы |
|---|---|
| 0 (без размытия) | 1 |
| 1 | 3 |
| 2 | 5 |
| 3 | 7 |
По умолчанию свойство установлено в значение 9.
Это свойство не предназначено для анимации. Изменение этого свойства приведёт к повторной компиляции базовых шейдеров OpenGL.
source : alias
Это свойство определяет элемент-источник, который будет использован в качестве источника для создаваемой тени.
Примечание: Нельзя использовать эффект с самим собой, например, установив source на родительский элемент эффекта.
spread : alias
Это свойство определяет, насколько большая часть цвета тени усиливается вблизи краёв источника.
Значение варьируется от 0,0 до 1,0. По умолчанию свойство установлено в значение 0.0.
| Примеры вывода с разными значениями spread | ||
|---|---|---|
| spread: 0,0 | spread: 0,5 | spread: 1,0 |
| radius: 8 | radius: 8 | radius: 8 |
| samples: 17 | samples: 17 | samples: 17 |
| цвет: #000000 | цвет: #000000 | цвет: #000000 |
| горизонтальноеСмещение: 0 | горизонтальноеСмещение: 0 | горизонтальноеСмещение: 0 |
| вертикальноеСмещение: 20 | вертикальноеСмещение: 20 | вертикальноеСмещение: 20 |
transparentBorder : alias
Это свойство определяет, есть ли у эффекта прозрачная граница.
При установке в true, внешний вид элемента дополняется прозрачной границей шириной 1 пиксель, что обеспечивает использование прозрачности вместо пикселей края при обработке вне текстуры источника. Без этого свойства изображение с непрозрачными краями не будет иметь размытой тени.
На изображении слева прямоугольник с прозрачными границами и размытыми краями, в то время как справа - нет:
По умолчанию это свойство установлено в значение true.
import QtQuick 2.12
import QtGraphicalEffects 1.12
Rectangle {
width: 180
height: 100
Row {
anchors.centerIn: parent
spacing: 16
Rectangle {
id: normalRect
width: 60
height: 60
radius: 10
color: "steelblue"
layer.enabled: true
layer.effect: DropShadow {
transparentBorder: false
horizontalOffset: 8
verticalOffset: 8
}
}
Rectangle {
id: transparentBorderRect
width: 60
height: 60
radius: 10
color: "steelblue"
layer.enabled: true
layer.effect: DropShadow {
transparentBorder: true
horizontalOffset: 8
verticalOffset: 8
}
}
}
} verticalOffset : вещественный
Свойства horizontalOffset и verticalOffset определяют смещение отрисованной тени по отношению к элементу DropShadow. Часто элемент DropShadow закреплен так, что он заполняет элемент источника. В этом случае, если свойства horizontalOffset и verticalOffset установлены в 0, тень отрисовывается ровно под элементом-источником. Изменяя свойства смещения, тень может быть расположена относительно элемента-источника.
Значения варьируются от -inf до inf. По умолчанию свойства установлены в 0.
| Примеры вывода с разными значениями горизонтальногоСмещения | ||
|---|---|---|
| горизонтальноеСмещение: -20 | горизонтальноеСмещение: 0 | горизонтальноеСмещение: 20 |
| radius: 4 | radius: 4 | radius: 4 |
| samples: 9 | samples: 9 | samples: 9 |
| цвет: #000000 | цвет: #000000 | цвет: #000000 |
| verticalOffset: 0 | verticalOffset: 0 | verticalOffset: 0 |
| spread: 0 | spread: 0 | spread: 0 |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qml-qtgraphicaleffects-dropshadow.html