6

带有截止阴影的 qml 窗口

我正在尝试使用带有 QtGraphicalEffects 的 QtQuick 2 为我的项目添加效果,但我不太明白如何调整真正模糊的效果以使其看起来正确。

在这种情况下,投影的大小很差,并且在完全消失之前会在边缘被剪裁。我怎样才能让它很好地融入而不被切断?

这是窗口的代码:

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
    width: 250
    height: 75

    Text {
        id: textItem
        x: 10; y: 10
        text: "how can I fix my shadow?"
    }

    DropShadow {
        id: shadowEffect
        anchors.fill: textItem
        source: textItem

        radius: 8
        samples: 16

        horizontalOffset: 20
        verticalOffset: 20
    }
}
4

2 回答 2

8

您必须允许原始项目(将由效果复制)周围有足够的空间以允许完全绘制效果,我会这样做:

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
    width: 320;
    height: 240;

    Text {
        id: textItem;
        anchors.centerIn: parent;
        text: "how can I fix my shadow?";

        /* extend the bounding rect to make room for the shadow */
        height: paintedHeight + (shadowEffect.radius * 2);
        width: paintedWidth + (shadowEffect.radius * 2);

        /* center the text to have space on each side of the characters */
        horizontalAlignment: Text.AlignHCenter;
        verticalAlignment: Text.AlignVCenter;

        /* hide the original item because the Graphical Effect duplicates it anyway */
        visible: false;
    }
    DropShadow {
        id: shadowEffect;
        anchors.fill: source;
        source: textItem;
        radius: 8;
        samples: 16;
        horizontalOffset: 20;
        verticalOffset: 20;
    }
}
于 2013-03-26T14:05:44.260 回答
2

Qt 图形效果绑定到它们所应用的项目的边界矩形。使边界矩形足够大(可能使用最小尺寸或任何丑陋的解决方案),所以你没有那种“截断”的外观

于 2013-03-21T07:24:35.527 回答