【发布时间】:2018-10-11 07:52:39
【问题描述】:
我目前正在学习 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()
}
}
}
在 main 中使用这些标志:
QQuickWindow::setDefaultAlphaBuffer(true);
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
主要问题是背景不透明。
我认为这是因为“圆形”矩形已完全绘制!?
我尝试了多个标志(Qt.Tool、Qt.Transparent、...),但没有一个有效。
我想知道我是否开始做我想做的事(我想我没有),最好的方法是什么。
我已经看到了 qml 项目的裁剪属性,但我也看到了性能问题。我不知道使用该属性是否是个好主意。
我使用 MSVC 作为编译器在 Qt 5.10 和 Win7 上运行。
谢谢
编辑:向窗口添加透明背景色
【问题讨论】:
-
我不能打招呼,不知道为什么...所以我在这里说。大家好
-
您是否尝试将窗口颜色设置为透明?
-
是的,我做到了。但是,正方形填满了整个窗口,不再是圆形了
-
窗户永远不是圆的。你充其量只能制造一种错觉。将
color设置为Window,而不是矩形... -
@Felix 仅仅因为它与 window 无关并不意味着它不会有任何效果。只是不是想要的效果,因为它仍然只是一个数值并且仍在设置中,因为 Qt 没有任何保护措施来防止设置不相关的标志。
标签: qt window qml transparency