在背景的透明按钮文本

时间:2016-10-10 13:35:08

标签: qt qml

我正在尝试在qml中创建透明文本。 我有一个自定义按钮:

ApplicationWindow {
    visible: true
    width: 320
    height:240
    style: ApplicationWindowStyle {
            background: Image { // paste any url here
                source: "https://t4.ftcdn.net/jpg/01/05/18/57/240_F_105185755_w384KDBvemK5Mn4oXzrWbCz9SRvHuDIh.jpg"
            }
    }
    Button
    {
        anchors.centerIn: parent
        style: ButtonStyle
        {
            padding
            {
                left: 16
                right: 16
                top: 8
                bottom: 8
            }

            background:
                Rectangle
                {
                    antialiasing: true
                    color: control.pressed ? "#d1d1d1" : control.hovered ? "#666" : "transparent"
                    border.color: "white"
                    radius: height/2
                    border.width: 1
                }

            label:
                Text
                {
                    text: "buttonText"
                    color: control.pressed ? "white" : control.hovered ? "#00000000" : "white"
                }
            }
        }
    }

我想要的只是在悬停状态下按钮中有透明文字。文字应该具有背景颜色。示例:Example

更新。我需要在没有着色器的情况下在慢速PC上工作。

1 个答案:

答案 0 :(得分:1)

一种选择是使用自定义QQuickPaintedItem并使用QPainterPath绘制"文字形状的孔"。

基本上就像这样

void MyItem::paint(QPainter *painter)
{
    QPainterPath path;
    path.addRect(0, 0, width(), height());
    path.addText(textX, textY, font, yourText);

    painter->setBrush(yourBackgroundColor);
    painter->setPen(Qt::transparent);
    painter->drawPath(path);
}

我担心,必须手动计算位置,即textXtextY,但QFontMetrics::boundingRect()应该有帮助。