Тип QML DropShadow
Генерирует мягкую тень позади элемента-источника. Подробнее...
| Заявление об импорте: | import QtGraphicalEffects 1.0 |
| С: | QtGraphicalEffects 1.0 |
| Наследует: |
Свойства
- cached : псевдоним
- color : псевдоним
- horizontalOffset : вещественное
- radius : целое
- samples : псевдоним
- source : псевдоним
- spread : псевдоним
- transparentBorder : псевдоним
- verticalOffset : вещественное
Подробное описание
Эффект DropShadow размывает альфа-канал входных данных, изменяет цвет результата и размещает его позади объекта-источника, чтобы создать мягкую тень. Цвет тени можно изменить с помощью свойства color. Положение тени можно изменить с помощью свойств horizontalOffset и verticalOffset.
| Источник | Примененный эффект |
|---|---|
Мягкая тень создается путем размытия изображения в режиме реального времени с помощью гауссова размытия. Выполнение размытия в режиме реального времени является дорогостоящей операцией. Полное гауссово размытие даже с умеренным количеством образцов будет работать только с 60 кадрами в секунду на графических процессорах высокого класса.
Если источник статичен, свойство cached можно установить для выделения другого буфера, чтобы избежать выполнения размытия каждый раз при отрисовке.
Пример
Следующий пример демонстрирует, как применить эффект.
import QtQuick 2.0
import QtGraphicalEffects 1.0
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 : целое
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 : псевдоним
Это свойство определяет, сколько образцов берётся на пиксель при расчете размытия по краям. Большее значение обеспечивает лучшее качество, но замедляет отрисовку.
В идеале, это значение должно быть в два раза больше наибольшего необходимого значения радиуса плюс один, например:
| Радиус | Образцы |
|---|---|
| 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.0
import QtGraphicalEffects 1.0
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, тень отрисовывается прямо под элементом-источником. Изменяя свойства смещения, тень можно разместить относительно элемента-источника.
Значения изменяются от -inf до inf. По умолчанию свойства установлены в 0.
| Примеры вывода с различными значениями горизонтальногоСмещения | ||
|---|---|---|
| горизонтальноеСмещение: -20 | горизонтальноеСмещение: 0 | горизонтальноеСмещение: 20 |
| радиус: 4 | радиус: 4 | радиус: 4 |
| образцы: 9 | образцы: 9 | образцы: 9 |
| цвет: #000000 | цвет: #000000 | цвет: #000000 |
| вертикальноеСмещение: 0 | вертикальноеСмещение: 0 | вертикальноеСмещение: 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/archives/qt-5.6/qml-qtgraphicaleffects-dropshadow.html