Spec-Zone.ru › Qt 5.15

Тип 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 : псевдоним

Это свойство определяет, сколько образцов берётся на пиксель при расчете размытия смягчения краёв. Большее значение обеспечивает лучшее качество, но замедляет рендеринг.

В идеале это значение должно быть в два раза больше наибольшего требуемого значения радиуса плюс единица, например:

class="generic">
Радиус Образцы
0 (без размытия) 1
1 3
2 5
3 7

По умолчанию свойство установлено в значение 9.

Это свойство не предназначено для анимации. Изменение этого свойства приведёт к повторной компиляции базовых шейдеров OpenGL.

source : alias

Это свойство определяет элемент-источник, который будет использован в качестве источника для создаваемой тени.

Примечание: Нельзя использовать эффект с самим собой, например, установив source на родительский элемент эффекта.

spread : alias

Это свойство определяет, насколько большая часть цвета тени усиливается вблизи краёв источника.

Значение варьируется от 0,0 до 1,0. По умолчанию свойство установлено в значение 0.0.

class="generic">
Примеры вывода с разными значениями 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.

class="generic">
Примеры вывода с разными значениями горизонтальногоСмещения

горизонтальноеСмещение: -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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API