我目前正在学习QML,我想创建一个顶部圆形的透明窗口。
我已经构建了类似的东西,但是出于多种原因,这似乎是错误的。
这是我的代码:
Window {
id: app
visible: true
width: 70
height: 70
flags: Qt.Window | Qt.FramelessWindowHint | Qt.WA_TranslucentBackground
Rectangle {
anchors.fill: parent
radius: parent.width / 2.0
color: "black"
MouseArea {
property point clickPos: "1,1"
anchors.fill: parent
drag.target: parent
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
app.x += delta.x;
app.y += delta.y;
}
onDoubleClicked: app.close()
}
}
}
在主目录中使用这些标志:
QQuickWindow::setDefaultAlphaBuffer(true);
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
主要问题是背景不透明。
我认为是因为“圆形”矩形已完全绘制!!
我尝试了多个标志(Qt.Tool,Qt.Transparent等),但没有一个起作用。
我想知道我是否可以很好地开始做自己想做的事情(我想我不想做),什么是最好的做事方法。
我已经看到了qml项目的clipping属性,但是我也看到了性能问题。我不知道使用该属性是否是个好主意。
我正在使用MSVC作为编译器的Qt 5.10和Win7上运行。
谢谢
编辑:在窗口中添加透明背景色
答案 0 :(得分:4)
添加一个答案,这样我就可以发布图像向您证明,您所需要做的就是设置颜色:
Window {
id: app
visible: true
width: 70
height: 70
flags: Qt.Window | Qt.FramelessWindowHint
color: "#00000000"
Rectangle {
anchors.fill: parent
radius: parent.width / 2.0
color: ma.pressed ? "red" : "black"
MouseArea {
id: ma
property point clickPos: "1,1"
anchors.fill: parent
drag.target: parent
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
app.x += delta.x;
app.y += delta.y;
}
onDoubleClicked: app.close()
}
}
}
结果:
我没有使用您在C ++中设置的任何标志,也许setDefaultAlphaBuffer()
正在为您破坏它。
答案 1 :(得分:1)