Тип QML DropShadow
Создаёт мягкую тень позади исходного элемента. Подробнее...
| Заявление об импорте: | import QtGraphicalEffects 1.13 |
| С: | 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 | ||
|---|---|---|
| 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 : alias
Это свойство определяет, сколько выборок берется на пиксель при расчете размытия по краям. Большее значение обеспечивает лучшее качество, но замедляет отрисовку.
В идеале это значение должно быть в два раза больше максимального необходимого значения радиуса плюс единица, например:
| Радиус | Выборка |
|---|---|
| 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 |
| color: #000000 | color: #000000 | color: #000000 |
| horizontalOffset: 0 | horizontalOffset: 0 | horizontalOffset: 0 |
| verticalOffset: 20 | verticalOffset: 20 | verticalOffset: 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 : real
Свойства horizontalOffset и verticalOffset определяют смещение для отрисованной тени по сравнению с положением элемента DropShadow. Часто элемент DropShadow закреплен так, чтобы он заполнял элемент-источник. В этом случае, если свойства horizontalOffset и verticalOffset установлены в 0, тень отрисовывается точно под элементом-источником. Изменяя свойства смещения, тень можно расположить относительно элемента-источника.
Значения изменяются от -бесконечности до бесконечности. По умолчанию свойства установлены в 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 |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qml-qtgraphicaleffects-dropshadow.html