我正在尝试在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"
}
}
}
}
我想要的只是在悬停状态下按钮中有透明文字。文字应该具有背景颜色。示例:
更新。我需要在没有着色器的情况下在慢速PC上工作。
答案 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);
}
我担心,必须手动计算位置,即textX
和textY
,但QFontMetrics::boundingRect()
应该有帮助。