Qt 顶部圆形透明窗
我目前正在学习QML,我想创建一个顶部圆形透明窗口 我已经构建了这样的东西,但由于多种原因,它似乎是错误的 这是我的密码:Qt 顶部圆形透明窗,qt,window,qml,transparency,Qt,Window,Qml,Transparency,我目前正在学习QML,我想创建一个顶部圆形透明窗口 我已经构建了这样的东西,但由于多种原因,它似乎是错误的 这是我的密码: Window { id: app visible: true width: 70 height: 70 flags: Qt.Window | Qt.FramelessWindowHint | Qt.WA_TranslucentBackground Rectangle { anchors.fill: par
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作为编译器在Qt5.10和Win7上运行
多谢各位
编辑:向窗口添加透明背景色
添加答案,这样我就可以发布一张图片,向您证明您所需要的只是设置颜色:
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++中设置的标志,也许是代码> SEDDEFALTALPHABUFER()/<代码>正在为你破解。< /P> < P>添加一个答案,这样我就可以发布一个图像来证明你所需要的是设置颜色:
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++中设置的标志,也许是代码> StEdDebug Tababuffe()/Cuth>正在为你破解它。 < P>我已经猜出来了。
我在网上更深入地搜索并通过thx发送到@dtech,我发现了这个
这和我的问题完全一样。但如果没有@dtech,我永远不会想到图形卡问题,这让我找到了这个解决方案
似乎您需要在windows上启用aero模式,以便能够在Qt上使用透明度
我激活了aero模式,然后重试给定的解决方案(@dtech的解决方案),效果非常好
编辑:这是一个众所周知的“错误”上
现在我有了解决办法,这似乎很明显,但我以前没有考虑过
谢谢大家我已经弄明白了
我在网上更深入地搜索并通过thx发送到@dtech,我发现了这个
这和我的问题完全一样。但如果没有@dtech,我永远不会想到图形卡问题,这让我找到了这个解决方案
似乎您需要在windows上启用aero模式,以便能够在Qt上使用透明度
我激活了aero模式,然后重试给定的解决方案(@dtech的解决方案),效果非常好
编辑:这是一个众所周知的“错误”上
现在我有了解决办法,这似乎很明显,但我以前没有考虑过
谢谢大家我不能打招呼,不知道为什么。。。所以我在这里说。你好,伙计你能试着把窗户的颜色设置成透明的吗?是的,我试过了。但是,正方形填满了整个窗户,不再是圆的了。窗户从来都不是圆的。你充其量只能制造一种错觉。为
窗口设置颜色
,而不是矩形…@Felix仅仅因为它与窗口无关并不意味着它不会有任何效果。只是这不是一个期望的效果,因为它仍然只是一个数值,而且它仍然在被设置,因为Qt没有任何防止设置无关标志的措施。我不能打招呼,不知道为什么。。。所以我在这里说。你好,伙计你能试着把窗户的颜色设置成透明的吗?是的,我试过了。但是,正方形填满了整个窗户,不再是圆的了。窗户从来都不是圆的。你充其量只能制造一种错觉。为窗口设置颜色
,而不是矩形…@Felix仅仅因为它与窗口无关并不意味着它不会有任何效果。这不是期望的效果,因为它仍然只是一个数值,并且仍在设置中,因为Qt没有任何防止设置无关标志的保护措施。复制/粘贴代码并没有给我与您相同的输出。我的红环周围还有一个黑色的长方形。这很奇怪,我试图删除我的C++设置,但它仍然是一样的。你能发布你的main.cpp吗?它是一个新的空白项目的标准自动生成的main.cpp。也许你的项目没有重建。尝试全部清除/运行qmake/rebuild all.Done。没有什么变化。我有自动生成的QtQuickApplication的main(空的)。和你一样吗?这里有一个我所拥有的链接:好吧,在这种情况下,它可能是一些bug。我在Windows7和mingw上使用Qt5.11,但我在Qt的早期版本中使用了透明窗口,没有问题。我怀疑编译器是否会起作用。所以这可能是一个外部问题,比如说与图形卡驱动程序的不兼容。好吧,这很奇怪。我要在家里做些测试看看有没有变化。ThxCopy/粘贴您的代码并没有给我与您相同的输出。我的红环周围还有一个黑色的长方形。这很奇怪,我试图删除我的C++设置,但它仍然是一样的。你能发布你的main.cpp吗?它是一个新的空白项目的标准自动生成的main.cpp。也许你的项目没有重建。尝试全部清除/运行qmake/rebuild all.Done。没有什么变化。我有自动生成的QtQuickApplication的main(空的)。和你一样吗?这里有一个我所拥有的链接:好吧,在这种情况下,它可能是一些bug。我在Windows7和mingw上使用Qt5.11,但我在Qt的早期版本中使用了透明窗口,没有问题。我怀疑编译器是否会起作用。所以这可能是一个外部问题,比如说与图形卡驱动程序的不兼容。好吧,这很奇怪。我要在家里做些测试看看有没有变化。谢谢