Spec-Zone.ru › Qt 5.6

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

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

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

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.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.

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

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

Spec-Zone.ru

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